2012-02-07 65 views
1

ID爲'typehere'的輸入類型。在typhere上有一個keydown事件。簡單的問題是e.srcElement.value似乎有一個關鍵值。即如果該值應該是'',則將其安慰'作爲空白'進行報告。如果我輸入'ss',則顯示的值是's'。我似乎無法弄清楚這一點。 console.log(e)顯示e.srcElement.value(在控制檯中)的正確值,但console.log(e.srcElement.value)顯示錯誤的值。爲什麼?e.target.value顯示一個鍵'後面'的值

<script type="text/javascript"> 
      var xmlHttp = createXmlHttpRequestObject(); 
      selectOption = document.getElementById('choose_colony') ; 

      document.body.onload = function() { 
       typehere = document.getElementById('typehere') ; 

       addAnEvent(typehere,"keydown",handleKeyDownevent,false) ; 
      } 

      function handleKeyDownevent (e) { 
       e = e || window.event ; 
       if (xmlHttp) { 
        try { 
         //xmlHttp.open('GET' , 'async.txt', true) ; 
          console.log(e.srcElement.value) ; 
         var target= e.target || e.srcElement ; 
         var typed = target.value  ; 
         if (typed != ""){ 
          console.log('sennding request') ; 
          //ajax request 
         } 
         else { 
          console.log(e.srcElement.value + "is blank") ; 
         } 
        } 
        catch(e) { 
         console.log('could not connect to server') ; 
        } 
       } 

      } 
</script> 

腳本標籤是標籤之前BTW

感謝

回答

3

(對於分型人物,你通常需要keypress,而不是​​爲keypress重複。)

​​前被解僱值已更改(與keypress一樣),特別是您可以取消按鍵,所以如果要在更改後處理該值,則可能需要d請致電setTimeout(func, 0)致電。在事件鏈展開之後,您的電話將得到處理。 (通常在5-10毫秒)。

Live example

因此,在你的代碼,可能看起來像這樣的:

addAnEvent(typehere,"keydown",function(e) { // or "keypress" 
    e = e || window.event; 
    setTimeout(function() { 
     handleKeyDownevent(e); 
    }, 0); 
},false) ; 
+0

我有我的代碼實現相同的麻煩。但這顯然是解決方案。謝謝 – 2012-02-07 14:07:18

+0

好吧,它的工作。我錯誤地使用了settimeout。 – 2012-02-07 14:09:34

+0

不能'keyup'有用嗎? ...以及等待用戶釋放密鑰需要多長時間? – Stefan 2012-02-07 14:23:14

0

使用keyup事件,而不是KEYDOWN的。

0

簡單的答案在於,當您試圖確定事件中的變量值時,它由事件處理程序處理,因此最好只記錄事件本身。所以你可以嘗試修改你的代碼以適應這種情況,看看是否有幫助。另外,我上面的答案不同意關於需要設置/包括超時(功能),除非你想取消任何按鍵動作,等澄清:

<script type="text/javascript"> 
     var xmlHttp = createXmlHttpRequestObject(); 
     selectOption = document.getElementById('choose_colony') ; 

     document.body.onload = function() { 
      typehere = document.getElementById('typehere'); 
      addAnEvent(typehere, "keydown", function(e) { 
       e = e || window.event; 
       handleKeyDownevent(e);}, false); 
     } 
function handleKeyDownevent (e) { 
      e = e || window.event ; 
      if (xmlHttp) { 
       try { 
        //xmlHttp.open('GET' , 'async.txt', true) ; 
         console.log(e.srcElement.value) ; 
        var target= e.target || e.srcElement ; 
        var typed = target.value  ; 
        if (typed != ""){ 
         console.log('sennding request') ; 
         //ajax request 
        } 
        else { 
         console.log(e.srcElement.value + "is blank") ; 
        } 
       } 
       catch(e) { 
        console.log('could not connect to server') ; 
       } 
      } 
      return true; 
     } 
</script> 

我希望可以幫助你。底部的return true允許瀏覽器的默認響應。

相關問題