2016-01-22 107 views
0

我有一個搜索表單,我想用我的網站在一個框中輸入文本,並使用單選按鈕選擇搜索引擎(網站搜索或我的圖書館目錄)。Javascript搜索表單代碼

此代碼在Firefox和Chrome,但不是IE瀏覽器和Safari瀏覽器的工作原理:

<script type="text/javascript"> 
function dosearch() { 
var sf=document.searchform; 
var submitto = sf.sengines.value + escape(sf.searchterms.value); 
window.location.href = submitto; 
return false; 
} 
</script> 

<form name="searchform" onSubmit="return dosearch();"> 
<input type="text" name="searchterms" size="20"> 
<input type="submit" name="SearchSubmit" value="Search"> 
<br /> 
<input type="radio" name="sengines" checked value="http://chelmsford.mvlc.org/search/keyword/">Catalog &nbsp;&nbsp;&nbsp; 
<input type="radio" name="sengines" value="http://chelmsfordlibrary.org/?s=">Site 
</form> 

而且我也有這樣的代碼,這在IE工作,但不能在Firefox:

<script> 
function myFunction() { 
var engine = document.forms[0]; 
var txt = ""; 
var term = escape(document.radiosearch.searchterms.value) 
var i; 
for (i = 0; i < engine.length; i++) { 
    if (engine[i].checked) { 
     txt = txt + engine[i].value; 
    } 
} 
window.location.href = txt + term; 
} 
</script> 

<form name="radiosearch" onSubmit="return myFunction();"> 
<input type="text" name="searchterms" size="20"> 
<input type="submit" value="Search"> 
<br /> 
<input type="radio" name="engine" value="http://chelmsford.mvlc.org/search/keyword/" checked>Catalog</input> &nbsp;&nbsp;&nbsp; 
<input type="radio" name="engine" value="http://chelmsfordlibrary.org/?s=">Site</input> 
</form> 

我怎樣才能合併或更正這些,所以一段代碼可以在所有瀏覽器中工作?

+0

你看到在IE或Safari會爲您提供一個線索在調試控制檯中的任何錯誤是怎麼回事錯在那裏? – jfriend00

+0

此外,'escape()'已被棄用 - 你可能想使用'encodeURIComponent()',或者你可能只是做'window.location.href = encodeURI(text + term)'而不是。 – jfriend00

+0

謝謝jfriend00--不幸的是,調試器沒有提供任何幫助。 IE中發生的事情是「未定義」,然後我輸入的任何搜索詞都會附加到當前URL的末尾,而不是交換搜索引擎字符串和window.location的搜索詞。我會繼續工作 - 感謝您的建議。 – herzogbr

回答

0

您正在使用獲取單選按鈕值的非標準方法。我建議這裏面在Chrome,IE和Firefox的工作(我沒有嘗試Safari瀏覽器的能力,但它應該也在那裏工作):

function dosearch() { 
    var sf = document.searchform; 
    var searchLocation = sf.querySelector('input[name="sengines"]:checked').value; 
    window.location.href = searchLocation + encodeURIComponent(sf.searchterms.value); 
    return false; 
} 

而且,這裏是用來記錄URL工作演示它會去:https://jsfiddle.net/jfriend00/h873sfgw/


僅供參考,一個老式的方式來獲得的單選按鈕組的值,包括手動通過每個單選按鈕迭代,直到找到一個是.checkedhttp://www.dyn-web.com/tutorials/forms/radio/get-selected.php


下面是上述「老土」的方式來解決這個問題,在舊版本的IE的作品之一代碼:

function log(x) { 
 
    var div = document.createElement("div"); 
 
    div.innerHTML = x; 
 
    document.body.appendChild(div); 
 
} 
 

 
function dosearch() { 
 
    var form = document.getElementById("searchform"); 
 
    var terms = document.getElementById("searchterms") 
 
    var searchLocation = getRadioValue(form, "sengines"); 
 
    //window.location.href = searchLocation + encodeURIComponent(terms.value); 
 
    log(searchLocation + encodeURIComponent(terms.value)); 
 
    return false; 
 
} 
 

 
function getRadioValue(formObj, groupName) { 
 
    var inputs = formObj.getElementsByTagName("input"), item; 
 
    for (var i = 0; i < inputs.length; i++) { 
 
     item = inputs[i]; 
 
     if (item.type === "radio" && item.name === groupName && item.checked) { 
 
      return item.value; 
 
     } 
 
    } 
 
}
<form id="searchform" name="searchform" onsubmit="return dosearch();"> 
 
<input type="text" id="searchterms" name="searchterms" size="20"> 
 
<input type="submit" name="SearchSubmit" value="Search""> 
 
<br /> 
 
<input type="radio" name="sengines" checked value="http://chelmsford.mvlc.org/search/keyword/">Catalog &nbsp;&nbsp;&nbsp; 
 
<input type="radio" name="sengines" value="http://chelmsfordlibrary.org/?s=">Site 
 
</form>
您可以按照這裏介紹做與功能

+0

再次感謝,但我仍在掙扎。我一直在處理你在這裏提供的代碼,但它在IE9中不適用於我(這是在這裏安裝的)。而不是用腳本構建的新URL替換window.location,它只是將變量追加到當前url的末尾。我也嘗試了不同的window.location方法,從http://stackoverflow.com/questions/28872598/window-location-href-not-working-in-ie-11,但沒有運氣。我在IE中看到你的演示程序正確記錄下來,但是試圖成功運行腳本仍然難以實現。 – herzogbr

+0

@herzogbr - 這是通用版本,我可以發現應該在IE9中工作:https://jsfiddle.net/jfriend00/foo73u44/。也修改HTML的更改。 – jfriend00

+0

@herzogbr - 這裏是一個真正的網頁,在IE9(我測試過)中使用了幾個不同版本的代碼:https://dl.dropboxusercontent.com/u/7909102/ie9-form-test.html和https://dl.dropboxusercontent.com/u/7909102/ie9-form-test2.html – jfriend00