2012-04-05 43 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

相关问题