2012-04-18 80 views
-3

我有這樣的:onkeypress事件文本框問題

<input type="text" ID="txtMy" name="txtMy" onkeypress="initialize();"/> 

而在我的js文件我有:

initialize() 
{ 
    var x = $("#txtMy").val(); 
} 

但是,如果我在文本框有 '2',然後我進入4 ,x的值仍然是2.如何解決這個問題?

+1

嘗試用'onkeyup'代替 – MilkyWayJoe 2012-04-18 16:59:03

+2

使用內聯屬性來附加事件處理程序是不好的做法。如果你使用像jQuery這樣的框架,那麼真的沒有理由這樣做,因爲它使整個綁定過程變得如此簡單。 – 2012-04-18 17:00:11

回答

1

使用keyup

這裏是你如何做到這一點的unobtrusive way

HTML

<input type="text" id="txtMy" /> 

腳本

$(function(){ 
    $("#txtMy").keyup(function (event) { 
    alert($(this).val()) 
    }); 
}); 

工作示例:http://jsfiddle.net/VmELF/4/

如果你要綁定的功能,其被注入到DOM文本框在dom負載之後(可能通過Ajax調用等),你m AY使用jQuery on

$(function(){ 
    $("body").on("keyup","#txtSearchKey",function (event) { 
    alert($(this).val()) 
    }); 
}); 
1

您在onkeypress中的初始化拼寫與聲明不匹配(inititalize)。

0

代替標記事件處理程序,你可以使用jQuery:

var x; 

$("#txtMy").on("keyup", function(){ 
    x = $(this).val(); 
    alert(x); 
}) 
+1

刪除了我以前的評論,因爲您已經編輯了該問題並且使其無關緊要。 – 2012-04-18 17:02:01

0

有幾件事情:

  1. 使用keyup事件。 keypress在錄製角色之前開始播放。
  2. 您的initialize()函數拼寫錯誤在您的HTML代碼片段中。

看到http://jsfiddle.net/8XTLW/1/

1

​​和keypress事件工作的jsfiddle都執行之前輸入的密鑰實際上已經出現在文本框中。如果您想在密鑰出現後獲取輸入的新值,請改爲使用keyup事件。

<input type="text" ID="txtMy" name="txtMy" onkeyup="initialize();"/> 

initialize() 
{ 
    var x = $("#txtMy").val(); 
} 

您應該考慮使用.on(),因爲你使用的庫反正在JavaScript綁定你的事件處理程序。保持你的邏輯(javascript)從你的視圖(html)分離是一個很好的習慣。