0

我有一个 onchange="do_something()" 的输入元素。当我输入并按下回车键时,它在 Firefox 和 Chromium(未在 IE 和 Safari 中测试)上正确执行(先做某事,然后提交),但在 Opera 中却没有(它立即提交)。我尝试使用这样的延迟:

<form action="." method="POST" onsubmit="wait_using_a_big_loop()">
<input type="text" onchange="do_something()">
</form>

但它也没有用。

你有什么建议吗?

编辑:最后我混合使用了 iftrue 和 crescentfresh 提供的解决方案,只是将字段取消聚焦以触发 do_something() 方法,我这样做是因为其他一些输入字段有其他方法 onchange。

$('#myForm').submit( function(){
    $('#id_submit').focus();
} );

谢谢

4

3 回答 3

3

您可以使用 jquery 并劫持表单。

http://docs.jquery.com/Events/submit

<form id = "myForm">

</form>

   $('#myForm').submit( function(){
   do_something();
   } );

这应该在调用该方法后提交表单。如果您需要更细粒度的控制,请在提交事件结束时抛出 return false 并使用 $.post() 发出您自己的 post 请求;

于 2009-07-30T20:46:09.167 回答
2

来自http://cross-browser.com/forums/viewtopic.php?id=123

根据规范,按 Enter 不应触发更改事件。当控件失去焦点并且其值已更改时,将发生更改事件。

在 IE 中按 enter 聚焦提交按钮 - 因此文本输入失去焦点,这会导致更改事件。

在 FF 中按 enter 不会聚焦提交按钮,但仍会发生更改事件。

在 Opera 中,以上都没有发生。

keydown跨浏览器更一致地检测字段的变化。

于 2009-07-31T00:31:02.003 回答
0

我不擅长 Javascript,但你能做这样的事情吗?

<form name="myform" action="." method="POST">
<input type="text" onchange="do_something();document.myform.submit();">
</form>
于 2009-07-30T20:44:22.090 回答