Javascript &引用;onchange";IE中的事件延迟?(使用Firefox可以)

Javascript &引用;onchange";IE中的事件延迟?(使用Firefox可以),javascript,internet-explorer,firefox,javascript-events,Javascript,Internet Explorer,Firefox,Javascript Events,这可能是一个初学者的问题,但我不明白为什么IE从来没有调用onchange事件,而它在firefox上运行正常 <input type="text" id="mytext" size="48" value="" onchange="execute()"/> <button type="button" onclick="execute()">Go</button> 去 单击按钮时调用execute函数,但更改输入框中的文本时不调用 有什么想法吗?即在您的输

这可能是一个初学者的问题,但我不明白为什么IE从来没有调用onchange事件,而它在firefox上运行正常

<input type="text" id="mytext" size="48" value="" onchange="execute()"/>
<button type="button" onclick="execute()">Go</button>
单击按钮时调用execute函数,但更改输入框中的文本时不调用


有什么想法吗?

即在您的输入失去焦点后进行操作,直到您单击按钮、制表符或单击屏幕上的其他位置。尝试onclick或其他事件之一。

IE仅在元素失去焦点时触发
onchange
事件-如果要在元素或选项卡外单击其他元素,则应触发该事件


您可以通过使用不同的事件来解决此问题,例如,据我记忆所及,IE不会处理与FF相同的onchange事件。 单击鼠标时将触发该事件


我建议您使用一个库来处理事件,例如…

哦,几个月前我也在这个问题上花了一些时间。 我为FF/IE onchange想出了这个解决方案

$("input[name*='delivery_method']").bind(($.browser.msie ? "click" : "change"), function() {
    //your code here
});

虽然恼人,但在元素失去焦点之前,
onchange
不会被触发,这并不是一个bug。(我通过为不同的事件提供多个绑定来解决这个问题;确保不要破坏处理程序,并在适当的情况下使用更新聚合。)

以下是:

当控件失去输入焦点且自获得焦点后其值已被修改时,将发生onchange事件。此属性适用于以下元素:输入、选择和文本区域

以下是:

此事件在提交内容时触发,而不是在值更改时触发。例如,在文本框上,当用户键入时不会触发此事件,而是在用户通过离开具有焦点的文本框提交更改时[触发]此事件


这种行为虽然通常令人讨厌,但却是指定的。

如其他地方所回答的,即在您单击输入字段外部之前不会触发事件

只是简单解释一下我是如何用jQuery修复它的。(这是我代码的翻译,因此可能包含bug…)


…已更改为

<input id="somecheck" name="somecheck" value="1">

<script language="javascript">
$(document).ready(function() {

    $('#somecheck').change(function() { dosomething(); } );
});
</script>

$(文档).ready(函数(){
$('#somecheck').change(function(){dosomething();});
});

对于那些新加入jQuery的用户,您基本上是在等待页面完全加载,然后将事件处理程序“dosomething”添加到输入框中。

也许您可以在那里查看一下:onchange事件似乎有一个错误使用跨浏览器框架,或者您还没有完成查找怪癖…确定只有IE显示此行为吗?我刚刚在FF3.5和IE7中测试了它——它们都表现出相同的行为,即都是在失去焦点后触发事件。经过一些尝试,我不得不承认这是最好的答案。jquery在IE上也有类似的问题。我不得不使用keydown事件,而不是onchange。像往常一样,阅读规范是一个很好的开始:“当控件失去输入焦点并且其值在获得焦点后被修改时,就会发生更改事件。”-通常最好同时使用
onkeypress
onchange
,因为该字段也可以通过右键单击+粘贴进行修改。这仅在菜单打开时才有效。Firefox和IE在菜单聚焦但实际上没有打开时有所不同,比如对于键盘用户(通过tab+箭头)。在本例中,Firefox在元素失去焦点之前不会触发onchange,而IE在箭头指向选项时会触发。当菜单实际打开时,完全不同的行为(通过Alt+向下箭头,包括屏幕阅读器行为)。你是对的!我会按照你的建议使用jquery,因为jquery是一个很好的建议,但它在onchange和iec上也有类似的问题。你能发布你的代码吗?我最近做了一件类似的事情来处理两个select输入,没有任何问题。
<input id="somecheck" name="somecheck" value="1">

<script language="javascript">
$(document).ready(function() {

    $('#somecheck').change(function() { dosomething(); } );
});
</script>