这可能是一个初学者的问题,但我不明白为什么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函数,但不会在输入框中的文本更改时调用。
有什么想法吗?
当元素失去焦点时,只有IE会触发onchange
事件 - 如果您单击元素外部或切换到不同的元素,则应该会触发。
您可以通过使用不同的事件来解决此问题,例如onkeypress
。
onkeypress
和 onchange
,因为该字段也可以通过右键+粘贴进行修改。 - Justin Johnsononchange
事件直到元素失去焦点才会触发,这并不是一个错误。(我通过为不同的事件绑定多个处理程序来解决此问题;确保不要覆盖处理程序,并在适当时使用更新聚合。)
以下是"官方" W3C文档:
当控件失去输入焦点且其值自获取焦点以来已被修改时,onchange事件会被触发。此属性适用于以下元素:INPUT、SELECT和TEXTAREA。
以下是MSDN参考:
当内容被提交时触发此事件,而不是在值改变时触发。例如,在文本框上,用户输入时不会触发此事件,而是[在用户离开具有焦点的文本框时触发]。
这种行为虽然经常很烦人,但是它是“按规定”的。
如其他地方所述,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>
哦,几个月前我也花了一些时间解决这个问题。我为FF/IE onchange想出了以下解决方案:
$("input[name*='delivery_method']").bind(($.browser.msie ? "click" : "change"), function() {
//your code here
});
IE在你的输入失去焦点后才会执行,这只有在你点击按钮、切换到其他选项卡或者屏幕上的其他位置时才会发生。尝试使用onclick或其他事件。