这可能是一个初学者的问题,但是我无法理解为什么IE浏览器在调用onfox时没有调用onchange事件。
<input type="text" id="mytext" size="48" value="" onchange="execute()"/>
<button type="button" onclick="execute()">Go</button>
单击按钮时调用execute函数,但输入框中的文本更改时不调用。
有什么想法吗?
答案 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)
答案 4 :(得分:2)
$("input[name*='delivery_method']").bind(($.browser.msie ? "click" : "change"), function() {
//your code here
});
答案 5 :(得分:1)
IE在输入失去焦点后执行此操作,直到您单击按钮,跳出标签或单击屏幕上的其他位置。尝试onclick或其他事件之一。