2011-05-26 104 views
21

文本輸入元素沒有更改事件嗎?當我將更改事件處理程序附加到文本輸入時,它不會被解僱。 Keyup被觸發,但是keyup不足以檢測到更改,因爲顯然有其他方法可以將文本輸入到輸入中。jQuery文本框更改事件

+2

也許這將有助於:http://stackoverflow.com/questions/1481152/jquery-how-to-detect-a-textboxs-content-has-changed – Bashwork 2011-05-26 14:13:38

+0

你使用$('input')。change( function(){do something}); ? – tenshimsm 2011-05-26 14:20:42

+0

是的,我使用.change和.keyup,但它們不夠,請在下面看到我的答案... – jcvandan 2011-05-26 14:29:10

回答

4

沒有真正的解決方案 - 即使在上面給出的其他問題的鏈接。最後我決定使用setTimeout並調用每秒檢查一次的方法!不是一個理想的解決方案,但是我所調用的解決方案和代碼很簡單,不會隨時被調用而影響性能。

function InitPageControls() { 
     CheckIfChanged(); 
    } 

    function CheckIfChanged() { 
     // do logic 

     setTimeout(function() { 
      CheckIfChanged(); 
     }, 1000); 
    } 

希望這可以幫助別人的未來,因爲它似乎有acheiving此使用的事件處理程序沒有萬無一失的方法...

14

更改事件僅在輸入失去焦點(並被更改)後纔會觸發。

+3

如果您真的想知道任何文本何時更改,就像它發生更改一樣,您會停止輪詢輸入。也就是說,將setInterval與一個函數進行比較,該函數將輸入的當前值與先前存儲的值進行比較(通過比函數範圍更高的某個變量)。如果這兩個值不匹配,則發生更改。然後,將當前值存儲到另一個變量中以進行下一次檢查。 – ventaur 2011-05-26 14:21:45

28

的HTML4規範爲<input> element指定以下腳本事件可用:

的onfocus,的onblur,ONSELECT,平變化, 的onclick,onfocus此,onmousedown事件, onmouseup,的onmouseover,的OnMouseMove, 的onmouseout,onkeypress事件,的onkeydown, 的onkeyup

這裏是結合對所有這些事件的一例,表示這是怎麼回事http://jsfiddle.net/pxfunc/zJ7Lf/

我想你可以過濾掉哪些事件是真正培訓相關您的情況,並檢測一下文本值之前和在事件發生後,確定變更

+1

我想過使用變化,焦點,模糊,鍵盤和mouseup在一起 - 然而mouseup只會在鼠標移動到texbox上時觸發,這意味着它不會從上下文菜單中粘貼用戶,粘貼可能是粘貼在文本輸入範圍之外 – jcvandan 2011-05-26 14:33:55

+1

看起來像新的瀏覽器支持'paste'和'input'事件,我在這裏找到它們之後添加了這些事件,[jquery - 如何檢測鼠標右鍵點擊並使用JavaScript粘貼](http:// stackoverflow.com/questions/441631/how-to-detect-right-mouse-click-paste-using-javascript)...heres [更新的小提琴](http://jsfiddle.net/pxfunc/zJ7Lf/1/ ) – MikeM 2011-05-26 14:38:26

+0

潛在有用,但如果他們沒有非常廣泛的支持,真的不能使用它們! – jcvandan 2011-05-26 14:40:59

21

我發現這工作:

$(document).ready(function(){ 
    $('textarea').bind('input propertychange', function() { 
     //do your update here 
    } 

}) 
+0

我廣泛使用它來驗證與ajax內聯。我認爲正在討論的新突變事件將取代某些功能,但該解決方案已經在Firefox,Chrome,IE 10和Safari中測試過,並且已知可以正常工作。 – 2013-07-02 17:45:15

1

可以實現它:

$(document).ready(function(){    
    $('#textBox').keyup(function() {alert('changed');}); 
}); 

或改變(柄複製與粘貼右鍵點擊):

$(document).ready(function(){    
    $('#textBox2').change(function() {alert('changed');}); 
}); 

這裏是Demo

+2

如果有人右鍵點擊並粘貼到文本框中,該怎麼辦? – jcvandan 2012-12-06 11:19:09

+0

檢查演示,其處理複製粘貼太 – 2014-01-17 12:08:30

+0

是的,它不處理右鍵單擊粘貼,然後退出 – PandaWood 2014-10-22 22:58:24

0
$('#input').on("input",function() {alert('changed');}); 

爲我工作。