2012-04-05 84 views
0

我有文本輸入元素,並且在blur事件和用戶按下Enter鍵時觸發事件。如何通過jQuery獲取文本元素的curent值

我的問題是,如果用戶輸入「foo」並按下輸入val()函數仍然返回null,在模糊事件val()返回foo後。據我瞭解,這是由於HTML輸入元素的值屬性僅在失去焦點時才更新。你能否給我一個解決辦法。

這裏是確切的代碼我使用:

var meetmove_address_field_listener = function(e){ 
    var type = $(this).attr('data-marker-type');; 
    var value = $(this).val(); 
    meetmove_map.geocodeAddress(type, value); 
}; 

$(document).ready(function(){ 
    $('input[data-type="name"]').blur(meetmove_address_field_listener); 
    $('input[data-type="name"]').keypress(function(event){ 
     if (event.which == 13){ 
      event.preventDefault(); 
      meetmove_address_field_listener(event); 
      return false; 
     } 
    }); 
}); 
+0

任何理由,你爲什麼不使用'。數據(「markerType」)'訪問數據屬性? – ThiefMaster 2012-04-05 07:50:26

+0

嗯,我只是沒有意識到它:) – 2012-04-05 08:01:57

+0

你可能還想考慮使用類選擇器來選擇你的輸入字段 - 它可能比使用屬性選擇器更快。至少在現代瀏覽器中有'getElementsByClassName()'等 – ThiefMaster 2012-04-05 08:03:26

回答

1

那麼真的Sudahir答案解決了我的問題---我濫用$(this)引用,根據上下文改變含義。卜,他刪除了他的回答所以這裏是工作代碼:

$(document).ready(function(){ 
    $('input[data-type="name"]').blur(meetmove_address_field_listener); 
    $('input[data-type="name"]').keyup(function(event){ 
     if (event.which == 13){ 
      event.preventDefault(); 
      var type = $(this).attr('data-marker-type'); 
      var value = $(this).val(); 
      meetmove_map.geocodeAddress(type, value); 
      return false; 
     } 
    }); 
}); 
+0

好吧,如果他轉貼它,我會很樂意接受它:) – 2012-04-05 08:30:38

3

值可以馬上訪問,你只需要使用正確的處理程序。 .keypress()將在之前觸發該字符顯示在輸入中。嘗試.keyup()而不是.keypress()它應該工作。

+1

真的沒關係,因爲我只在用戶按下輸入時觸發事件。 – 2012-04-05 08:07:54

+0

好點。我應該更仔細地閱讀代碼。 – 2012-04-05 09:30:13