2012-11-06 123 views
0

在下面的代碼片段中,我試圖通過使用preventDefault()來防止用戶輸入新行到<textarea>。我不想輸入新的行,而是希望回車鍵觸發模糊事件。但是,下面的代碼在用戶更改<textarea>中的文本並跳到回車後繞過了更改事件。如何確保在文本值更改時更改事件始終觸發?preventDefault()for keypress取消更改事件

$('textarea') 
.keypress(function (event) { 
    if (event.which == '13') {//13 = Enter 
     event.preventDefault(); 
     $(this).blur(); 
    } 
}) 
.change(function() {// THIS DOES NOT FIRE IF USER PRESSES ENTER 
    alert('change event'); 
}) 
.blur(function() { 
    console.log('blur event'); 
});//end: blur() 
+4

_I'm試圖阻止用戶輸入新行到textarea_Mmmmm ...似乎你需要的是一個文本輸入。 – elclanrs

+0

這將是一個不錯的選擇,但有些情況下,用戶需要輸入大量文本 - 超過一行就可以了。 – jake

+0

手動觸發change事件'$('textarea').change();'或$(this).change();'當您阻止默認行爲時。 –

回答

3

看起來這是事件ordering的問題。在IE change事件首先被解僱,然後blur事件被解僱,但在Firefox和Chrome中則相反。因此,當您在Firefox和Chrome中手動觸發blur()事件時,會導致focus事件觸發,但在IE中它不會。

+0

由於我無法依賴瀏覽器中變化和模糊事件的順序,我最終擺脫了變化事件監聽器,而是將相同的功能構建到blur事件中:查看新的textarea值是否爲改變。 – jake

0

只需手動觸發更改事件,就像觸發模糊事件一樣。