我很難試圖找出一種方法,我可以在沒有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