【问题标题】:Javascript search form code [closed]Javascript搜索表单代码[关闭]
【发布时间】:2016-01-22 18:06:05
【问题描述】:

我想在我的网站上使用一个搜索表单在一个框中输入文本并使用单选按钮选择搜索引擎(站点搜索或我图书馆的目录)。

此代码适用于 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>

如何合并或更正这些代码,以便在所有浏览器中都可以使用一段代码?

【问题讨论】:

  • 您是否在 IE 或 Safari 的调试控制台中看到任何可以为您提供线索的错误?
  • 另外,escape() 已被弃用 - 您可能想改用 encodeURIComponent(),或者您可能只是改用 window.location.href = encodeURI(text + term)
  • 感谢 jfriend00 - 很遗憾,没有,调试器没有提供任何帮助。在 IE 中发生的情况是“未定义”,然后我输入的任何搜索词都将附加到当前 URL 的末尾,而不是将搜索引擎字符串和搜索词交换为 window.location。我会继续工作 - 感谢您的建议。

标签: javascript html forms


【解决方案1】:

您正在使用非标准方式获取单选按钮值。我建议在 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/


仅供参考,一种获取单选按钮组值的老式方法,涉及手动迭代每个单选按钮,直到找到.checked。您可以使用此处描述的函数来做到这一点:http://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>

【讨论】:

  • 再次感谢,但我仍在苦苦挣扎。我一直在使用您在此处提供的代码,但它不适用于 IE9(此处安装的代码)。它不会将 window.location 替换为脚本构建的新 URL,而是将变量附加到当前 url 的末尾。我还尝试了 stackoverflow.com/questions/28872598/… 的不同 window.location 方法,但还没有运气。我看到您在 IE 中为我正确记录了您的演示,但是成功地尝试脚本仍然难以实现。
  • @herzogbr - 这是我能找到的应该在 IE9 中工作的通用版本:jsfiddle.net/jfriend00/foo73u44。节点也对 HTML 的更改。
  • @herzogbr - 这是一个在 IE9 中运行的实际网页(我对其进行了测试),其中包含几个不同版本的代码:dl.dropboxusercontent.com/u/7909102/ie9-form-test.htmldl.dropboxusercontent.com/u/7909102/ie9-form-test2.html
  • 太棒了!经过一些快速测试后,它可以在我在这里安装的所有浏览器中运行,所以我将在下周更彻底地处理它,并希望尽快推出。非常感谢你这样做,它真的帮助了我!
猜你喜欢
  • 2016-03-05
  • 2011-12-08
  • 1970-01-01
  • 2011-05-09
  • 2017-09-04
  • 2011-05-15
  • 1970-01-01
  • 2022-11-03
  • 1970-01-01
相关资源
最近更新 更多