Javascript IE8.click()在请求完成之前被终止,在chrome和FF上工作

Javascript IE8.click()在请求完成之前被终止,在chrome和FF上工作,javascript,jquery,json,firefox,internet-explorer-8,Javascript,Jquery,Json,Firefox,Internet Explorer 8,我有一个在提交时提交搜索字符串的工作函数。它在FF和Chrome上运行良好。当我点击搜索按钮时,它可以在所有浏览器上运行。问题在于我在按enter键时调用.click函数。它适用于FF和Chrome,但不适用于IE8。我没有用9测试,但我认为它也能工作 <input type="text" id="searchString" ><button id="SearchButton" type="submit" onclick="return false;">Look it u

我有一个在提交时提交搜索字符串的工作函数。它在FF和Chrome上运行良好。当我点击搜索按钮时,它可以在所有浏览器上运行。问题在于我在按enter键时调用.click函数。它适用于FF和Chrome,但不适用于IE8。我没有用9测试,但我认为它也能工作

<input type="text" id="searchString" ><button id="SearchButton" type="submit" onclick="return false;">Look it up!</button>

<script type="text/javascript">

$("#SearchButton").click(function() {

    var str = $("#searchString").val();
    if(str.replace(/\s/g,"") == ""){
        $('#loading').hide();
        return false;
    }

 $("#lookupresults").jqGrid('GridUnload');

    $("#lookupresults").jqGrid({
        ... <jqgrid code here>
    });
    ...

});


//this is what detects when i press the enter key , then i call the click of searchbuttong here
$("#searchString").keyup(function(event){
    if(event.keyCode == 13){
        $("#SearchButton").click();
    }
});
查一下!
$(“#搜索按钮”)。单击(函数(){
var str=$(“#搜索字符串”).val();
如果(str.replace(/\s/g,“”=“”){
$(“#加载”).hide();
返回false;
}
$(“#lookupresults”).jqGrid('GridUnload');
$(“#lookupresults”).jqGrid({
... 
});
...
});
//这是当我按下enter键时检测到的,然后我在这里调用searchbuttong的点击
$(“#searchString”).keyup(函数(事件){
如果(event.keyCode==13){
$(“#搜索按钮”)。单击();
}
});

我在日志上看到的是:

HttpMessageNotWritableException:无法写入JSON:连接 对等机重置:套接字写入错误;嵌套异常是 java.net.SocketException:对等方重置连接:套接字写入错误

这只是在ie8上,当我在FF和chrome上按enter键时,它工作正常。还有当我点击“查找”按钮时!ie8上的按钮也可以正常工作。这是因为我如何调用click()函数

IE8正确地完成这项工作的正确方式是什么

TIA

试试这个:

$("#searchString").keyup(function(event){
event.preventDefault();
if(event.keyCode == 13){
    $("#SearchButton").click();
}
});
“正确”的方法是使用submit事件

$("#theform").on("submit",function(e){
    e.preventDefault();
    var str = $("#searchString").val();
    if(str.replace(/\s/g,"") == ""){
        $('#loading').hide(); // what shows the loader?
        return;
    }
    $("#lookupresults").jqGrid('GridUnload');

    $("#lookupresults").jqGrid({
        ... <jqgrid code here>
    });
    ...
});

由于在表单内的输入上按enter键将触发submit事件,因此您不再需要在表单的每个输入上使用keyup事件来复制该默认行为。

您可以将其放入JSFIDLE页面进行测试吗?您应该从该enter键返回false,否则,无论单击事件的结果如何,它都将提交表单。最好取消keyup并完全单击事件,而改用提交事件。这是什么日志?你能试着在IE8中调试吗?点击F12,选择脚本选项卡,然后单击开始调试。这将使您更好地了解这个问题。我认为它是在某个地方提交的,而jqgrid负载并没有以某种方式触发。我尝试了even.preventDefault(),但它仍然给出相同的错误,并且在调试时没有使用正确的方法。感谢您的回复!这仍然是个例外。我选择了这个方法!谢谢我不知道为什么我一开始就选择了on按钮谢谢!但我只是好奇我提到的为什么它只在ie8上不起作用,很可能是时间问题。我明白了,谢谢!将在没有时间限制的情况下出现此问题:DMy猜测提交事件是在keyup事件发生之前触发的,这将解释为什么event.preventDefault()无法解决此问题。然而,我不明白,如果没有同样的问题,这怎么可能在其他浏览器中工作。
$("#theform").get(0).submit();