2011-02-28 107 views
20

我有一個<input type="text">,我需要在文本框中的文本被改變(包括在jQuery的keydown和keypress處理程序期間執行的操作)之後調用一個函數。在keydown/keypress後得到輸入值

如果我從jQuery處理程序中調用我的函數,我會看到值(e.target.value)與添加輸入之前的值。由於我不想每次都手動將輸入添加到值上,我如何調用我的函數並讓它使用更新後的值?

回答

22

如果我理解你的權利則是這樣就是這樣,u能做到這一點

$('input').bind('change keydown keyup',function(){ 
    /// do your thing here. 
    // use $(this).val() instead e.target.value 
}); 

更新:13年3月5日

請注意:你是最好使用.on()作爲反對.bind()

在jQuery 1.7中,。對()方法的是將事件處理程序附加到文檔的首選方法。對於早期版本,.bind()方法用於將事件處理程序直接附加到元素。處理程序被附加到jQuery對象中當前選定的元素上,所以這些元素必須存在於對.bind()的調用發生時。要獲得更靈活的事件綁定,請參閱.on()或.delegate()中的事件委託討論。

欲瞭解更多信息jQuery Bind

+0

+1解決我的問題。 – Sisir 2011-06-30 14:57:38

+0

無法將'keydown'和'keyup'一起指定爲'keypress'? – Dementic 2013-01-28 12:24:05

+1

@Dementic肯定他們可以,但它也取決於爲什麼你的目標是,如果你想要評估一些東西,而keydown被按下了x秒等等......但在大多數情況下,即使'keyup'也足夠了: ),因爲你必須按下才能按下...... :)如果我有任何意義。 – Val 2014-06-10 12:45:40

14

您可以使用KEYUP - 所以你只稱這是一次關鍵已發佈:

$("#idofinputfield").keyup(function() { 
    youFunction($(this).val()); 
}); 
+1

非常簡單!我一直在掙扎幾個小時。我不敢相信我沒有想到這一點。謝謝你的未來! – 2015-03-09 20:53:49

1

具有u嘗試了

$('#target').keyup(function(){  
    alert($(this).val());  
}); 
1

如果您需要綁定到層次結構中的某個元素,則可以訂閱keyDown處理程序中的keyUp事件。

$("#container").keydown(function (e) { 
    //here you decide whether to handle the key event, and grab the control that sent the event 
    var myInput = e.target; 
    $("#container").one('keyup', function() { 
     console.log(myInput.val()); 
     // do smth here 
    }); 
}); 
0

您應該使用event.key之前,它會顯示在文本框中獲取當前的輸入值

這是代碼。

function validate() 
 
{ 
 
    document.getElementById("divOutput").innerHTML = event.key; 
 
    //I am here returning false so that you can see that this value is being entered before the text is input. This is very useful for number validation purposes. 
 
    return false; 
 
}
Enter Number: <input type="text" id="txtInput" onkeydown="return validate()" /><br /> 
 
You Entered <div id="divOutput"></div>