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

luc*_*luc 5 javascript firefox internet-explorer javascript-events

这可能是一个初学者的问题,但我无法理解为什么onchange事件永远不会被IE调用,而它与Firefox一起工作正常.

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

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

任何的想法?

Gre*_*reg 15

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

例如,您可以通过使用其他事件来解决这个问题onkeypress.

  • 像往常一样,阅读规范是一个很好的起点:*"更改事件发生在控件失去输入焦点并且其值已经被修改后获得焦点."* - http://www.w3.org/TR /DOM-Level-2-Events/events.html#Events-eventgroupings-htmlevents (4认同)
  • 当然只有IE显示这种行为?我刚刚在FF3.5和IE7中对它进行了测试 - 两者都表现出相同的行为,即在失去焦点后都会触发事件. (2认同)

小智 6

虽然令人讨厌,但它是不是一个错误onchange不会触发,直到元素失去焦点.(我通过为不同的事件设置多个绑定来解决这个问题;确保不要破坏处理程序并在适当的时候使用更新聚合.)

以下是关于该主题"官方"W3C文档:

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

这是MSDN参考:

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

这种行为虽然经常令人讨厌,但却是如规定的那样.