IE中“onchange”事件延迟了吗? (好吧用Firefox)

时间:2009-10-20 13:42:00

标签: javascript internet-explorer firefox javascript-events

这可能是一个初学者的问题,但是我无法理解为什么IE浏览器在调用onfox时没有调用onchange事件。

<input type="text" id="mytext" size="48" value="" onchange="execute()"/>
<button type="button" onclick="execute()">Go</button>

单击按钮时调用execute函数,但输入框中的文本更改时不调用。

有什么想法吗?

6 个答案:

答案 0 :(得分:15)

IE仅在元素失去焦点时触发onchange事件 - 如果您要在元素或制表符外部单击它应触发的其他元素。

您可以使用其他事件来解决此问题,例如onkeypress

答案 1 :(得分:6)

虽然很烦人,不是错误 onchange未被解雇,直到该元素失去焦点。 (我通过为不同的事件设置多个绑定来解决这个问题;确保不要破坏处理程序并在适当的时候使用更新聚合。)

以下是"official" W3C documentation on the subject

  

当控件丢失输入焦点时,onchange事件发生,并且自获得焦点后其值已被修改。此属性适用于以下元素:INPUT,SELECT和TEXTAREA。

以下是MSDN reference

  

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

这种行为虽然经常令人讨厌,却指定

答案 2 :(得分:3)

正如其他地方所解释的那样,IE在您输入字段外单击之前不会触发事件。

快速了解我如何使用jQuery修复它。 (这是我的代码的翻译,所以它可能包含错误...)

<input id="somecheck" name="somecheck" value="1" onchange="dosomething();">

......改为......

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

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

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

对于那些刚接触jQuery的人,你基本上都在等待页面完全加载,然后你要添加事件处理程序&#39; dosomething&#39;到输入框。

答案 3 :(得分:2)

据我记忆,IE不会像FF一样处理onchange事件。 单击鼠标时将触发该事件。

我建议您使用库来处理jQueryDojo等事件。

答案 4 :(得分:2)

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

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

答案 5 :(得分:1)

IE在输入失去焦点后执行此操作,直到您单击按钮,跳出标签或单击屏幕上的其他位置。尝试onclick或其他事件之一。