2010-02-28 127 views
5

我需要捕獲keyup事件以在用戶輸入輸入時提供實時驗證(僅當輸入失去焦點時纔會觸發更改事件)。JavaScript:如何從keyup事件中獲取sender input元素的值?

我無法獲取激發evnt的輸入的編輯值。

該代碼還運行在定時器上,以防止用戶輸入時發出多個呼叫(每500毫秒觸發一次)。

我有類「priceinput」一些投入和重視KEYUP每個事件類似如下:

<script language="javascript" type="text/javascript"> 
    var timer; 
    $(document).ready(function() 
    { 
     $(".priceinput").each(function() 
     { 
      $(this).keyup(function(e) 
      { 
       clearTimeout(timer); 
       timer = setTimeout(function() 
       {  
       //how to get the value of the input element that was changed? 
       var value = ???; 
        $.getJSON('/Validator/IsValidInput', { input: value }, 
        function(response) 
        { 
         //indicate if input is correct 
        }); 
       }, 500); 
      }); 
     }); 
    }); 
</script> 

獲取發送輸入值,我已經試過$(this).valthis.val()e.target.val()但沒有似乎工作。

如何獲取發件人輸入的值?

回答

6

問題是,在你的超時函數中,你已經失去了對輸入元素的「this」引用。嘗試是這樣的:

$('.priceinput').keyup(function(e) { 
    var $input = $(this); 
    clearTimeout(timer); 
    timer = setTimeout(function() { 
    var value = $input.val(); 
    $.getJSON(...); 
    }, 500); 
}); 
+2

+1與超時和回調時,這是一個很常見的模式。還要注意,作爲尖刻的節目,.each()不是必需的,jquery在內部處理它。 –

+0

只需要注意人們對** $ input **中的$符號的疑問:它是變量名稱的一部分,在這種情況下,它用於指出該變量是一個jQuery對象。有關詳細信息,請參閱[此處](http://stackoverflow.com/questions/205853/why-would-a-javascript-variable-start-with-a-dollar-sign)。 – rob74

1

在Internet Explorer中應該是event.srcElement,在Firefox event.target
或嘗試event.toElementevent.relatedTarget

(當然與.value.val()將它們組合)

相關問題