2012-04-05 2 views
0

У меня есть элемент ввода текста, и событие запускается при событии размытия и при нажатии пользователем.Как получить текущее значение текстового элемента через jQuery

Моя проблема в том, что если пользователь вводит «foo» и нажимает enter val() функция все же возвращает null, после события размытия val() возвращает foo. Насколько я понимаю, это связано с тем, что свойство value элемента ввода 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

Любая причина, по которой вы не используете '.data ('markerType')' для доступа к атрибуту data? – ThiefMaster

+0

Ну, я просто не знал об этом :) –

+0

Вы также можете рассмотреть возможность использования селектора классов для выбора полей ввода - это, вероятно, намного быстрее, чем использование селектора атрибутов. По крайней мере, в современных браузерах, которые имеют 'getElementsByClassName()' и т. Д. – ThiefMaster

ответ

1

Ну, действительно, решение Судахира решило мою проблему --- я неправильно использовал ссылку $ (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

Ну, если он его отпишет, я с радостью соглашусь с ним :) –

3

Значение можно получить сразу, вам просто нужно использовать правильный обработчик. .keypress() будет стрелять до символ отображается на входе. Попробуйте .keyup() вместо .keypress(), и он должен работать.

+1

Это действительно не имеет значения, потому что я запускаю событие только при нажатии пользователем. –

+0

Хорошая точка. Я должен был внимательно прочитать код. –