我很难试图找出一种方法,我可以在没有IE8的情况下更新输入字段,发起第二次更改事件。在FF 3.6这个代码工作,因为我想要的。如何停止在JQuery中触发第二个更改事件?
我认为从函数事件处理程序返回false会阻止任何进一步的事件被触发,但它不会在IE中出现。
这是我迄今为止尝试:
- 在现场事件处理函数返回false。
- 使用绑定和event.stopImmediatePropagation()。虽然我想在实际的代码中使用,因为表单元素正在通过AJAX调用进行交换。
- 在输入字段更新之前和之后使用die并再次生活。但我想这个更新的输入字段发生在函数完成后。
有什么明显的我在这里失踪?我对JQuery相当陌生,所以也许我犯了一个愚蠢的错误:)
谢谢!
下面是一些测试代码,以显示该问题:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.0/jquery.min.js"></script>
<script>
var counter = 0;
$(document).ready(function() {
$('.eventHandler').live('change', handleChangeEvent);
});
function handleChangeEvent(event){
//$('.eventHandler').die();
$(this).val(counter++);
//$('.eventHandler').live('change', handleChangeEvent);
return false;
}
</script>
</head>
<body>
<form>
<input type="text" value="0.00" id="54501" class="eventHandler"/>
</form>
</body>
</html>
回答我自己的问题
不允许作为一个新的用户来回答我的问题8个小时。所以现在就把这个放在这里
只是通过解释这个问题更多地向Dr.Molle解释。总是这样可以帮助解决问题。
因为当我更新输入字段值时输入仍然有焦点,当我点击它时会触发另一个“更改”事件。
所以如果我在更新输入字段值之前删除焦点,它永远不会触发另一个事件。
我改变了代码,这和作品,我希望它在IE:
var counter = 0;
$(document).ready(function() {
$('.eventHandler').unbind('blur').live('change', handleChangeEvent);
});
function handleChangeEvent(event){
$('body').focus();
$(this).val(counter++);
event.preventDefault();
return false;
}
感谢您的帮助Dr.Molle,在解释它更是帮助我工作了 - 干杯!
嗨感谢答复。只是尝试了所描述的解除绑定,但不幸的是,在更新输入字段时仍然触发了更改事件。 – mrchimp 2011-05-06 10:43:56
嗯,如果我取消注释handleChangeEvent中的2行,一切工作正常,也在IE8中。期望的行为是什么? – 2011-05-06 12:10:30
奇怪的是,对我来说,这两条线的注释仍然不起作用。最初它似乎有效,但只要您点击页面上其他地方的输入损失重点,它甚至会触发另一个更改。因此陷入循环。理想情况下,只需要能够使用值更新输入字段而不触发另一个“更改”事件。看着我的例子的奇怪的要求。但在应用程序中,我希望看到输入字段已清除,然后使用结果进行更新。但有时用户输入一个值,我不想更新输入。 – mrchimp 2011-05-06 13:02:22