2017-04-12 76 views
1

我有onkeydown()事件的功能,並獲得輸入文本的值長度我按ctrl+a /阻止一個文本(有5個字符),並鍵入單個字符,但輸出值長度爲輸入是4而不是0錯誤的輸入文本值長度

function typeInput(that) { 
 
    console.log($(that).val().length); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="text" onkeydown="typeInput(this)">

+2

你提供'that'? 'onkeydown =「typeInput(this)」'它應該是'$(that).val()。length()' – Satpal

+0

@Satpal對不起我的錯誤,那已經有'.val()' – itx

回答

3

只是一對夫婦的事情。我真的很喜歡this關鍵字,所以我通常綁定我的事件,如下所示。另外,我想你想要onkeyup而不是onkeydown,因爲onkeydown在最新字符被添加到.val()之前被觸發。

function typeInput(){ 
 
    console.log($(this).val().length); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="text" onkeyup="typeInput.bind(this)()">

+0

這是實際答案是,原始問題的問題是在他輸入了輸入文本後仍然輸出舊文本的長度。 – George

+0

準確地說,爲什麼我仍然使用'onkeydown'而不是'onkeyup'?我想防止輸入密鑰,我有這個問題[禁用表單提交輸入](http://stackoverflow.com/questions/11235622/jquery-disable-form-submit-on-enter),如果我使用'onkeyup'並按下'輸入'鍵,提交表單仍在發射。我知道現在和我的問題有不同的問題,但它仍然有關係。謝謝@nfn neil – itx

+0

哦,您需要在阻止提交時定位表單。 – Neil

2
<input type="text" onkeydown="typeInput.bind(this)()"> 

休息代碼是完全正常。

工作例如: -

function typeInput(that) { 
 
    console.log($(this).val().length); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="text" onkeyup="typeInput.bind(this)()">