jQuery: val () обновлен слишком поздно - PullRequest
0 голосов
/ 20 января 2010

ОБНОВЛЕНИЕ: возникла проблема с другим кодом.

Я пытаюсь получить значение некоторого поля ввода текста. Проблема в том, что значение, которое я получаю

my_val = $('#MyInput').val();

на самом деле не обновляется.

Если я напишу в поле 'foo' и затем нажму на элемент, который запускает скрипт, тогда я получу my_val = undefined.

С другой стороны, если я напишу в поле 'foo', ЩЕЛКНИТЕ КУДА-ЛИБО, а затем щелкните элемент, который запускает сценарий, я получу my_val = 'foo'.

Похоже, что Firefox обновляет val только при размытии. Есть ли способ получить правильное значение? (Нет, $ ('# MyInput'). Blur () не работает).

РЕДАКТИРОВАТЬ: Я добавляю больше информации по запросу. В настоящее время я использую Firefox 3.5 в Ubuntu 9.10, но то же самое происходит с последней бета-версией Chrome.

Простейший пример:

<p>Bar</p>
<form>
<input type="text" id="input" />
</form>

, а затем Javascript

$('p').click(function() {
    my_val = $('#input').val();
    alert(my_val);
});

Попробуйте написать что-нибудь во ввод, а затем щелкните по абзацу, не покидая поля.

EDIT2: неважно, это был какой-то другой код, который вмешивался. Извините за потраченное время: - (

Ответы [ 2 ]

2 голосов
/ 20 января 2010

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

var my_val;

$('#MyInput').keyup(function() {
    my_val = $(this).val();
});

$('p').click(function() {
    alert(my_val);
});

Обратите внимание, что .change() не будет работать, поскольку он также срабатывает только при размытии.

0 голосов
/ 20 января 2010

Вызов методов jQuery blur и focus вызовет все обработчики событий, которые зарегистрированы для этого события, но на самом деле не изменит фокус.

Вам нужно вручную сфокусировать другой элемент, например так:

document.getElementById('something').focus();

Если вы делаете это с использованием jQuery, вам нужно будет написать [0], чтобы вызывать метод DOM focus, а не метод jQuery focus.
Например:

$('input')[0].focus();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...