.change () работает только на select, если множественное число включено - PullRequest
0 голосов
/ 17 ноября 2010

Просмотр последней демонстрации для функции .change() jQuery.

Может кто-нибудь объяснить мне, почему он работает, перемещаясь со стрелками вверх и вниз и меняя значение, но если я удаляю атрибут multiple в select, я всегда должен нажимать Enter до его запуска?1007 *

Есть ли способ это исправить?

Ответы [ 3 ]

2 голосов
/ 17 ноября 2010

Помните, что событие change происходит только в том случае, если изменяется значение элемента input.Когда пользователь взаимодействует с выбором нескольких значений, с помощью мыши или с помощью клавиатуры, значение изменяется - вы можете увидеть это в демонстрации на странице, когда отображается value элемента.

Однако при выборе одного значения значение не изменяется , когда вы открываете раскрывающийся список и наводите курсор на значение, а также когда вы делаете то же самое с помощью клавиатуры.Поэтому событие change работает правильно.


Если вы хотите обойти эту проблему, вы всегда можете использовать событие keydown, чтобы отловить изменения в значении и использовать его вместо этого.Это простой пример того, как может выглядеть такая функция:

$('select').focus(function() {
    var v = this.value,
        t = $(this),
        c = t.children(':selected'); // Store the currently selected 
                                     // option element in a variable

    t.keydown(function(e) {
        switch (e.keyCode) {
        case 38:
        case 37:
            c = c.prev().length ? c.prev() : c;
            break;
        case 40:
        case 39:
            c = c.next().length ? c.next() : c;
            break;
        }

        // Do something with this information
        console.log(c.text());
    });
}).blur(function() {
    $(this).unbind('keydown');
});

См. Простую демонстрацию этого здесь: http://jsfiddle.net/yijiang/UWaut/

1 голос
/ 17 ноября 2010

Я думаю, что поведение вызвано тем, как браузеры обрабатывают события клавиатуры на полях выбора.Для полей выбора одной строкой событие onchange запускается, когда значение изменилось, и фокус перемещается за пределы поля, либо нажав клавишу ввода или вкладку, либо щелкнув где-нибудь за пределами поля.Это имеет смысл в определенных сценариях: если вы, например, хотите перенаправить пользователя на другую страницу в зависимости от его выбора, вы все равно хотите, чтобы он мог прокручивать поле с помощью клавиш со стрелками, не перезагружая страницу после каждого нажатия клавиши.

Если вы явно хотите вызывать функцию каждый раз, когда пользователь нажимает клавишу со стрелкой на поле, используйте событие keyup.

0 голосов
/ 17 ноября 2010

Вместо этого вы захотите использовать .keypress ().

Вот эта страница:

http://api.jquery.com/keypress/

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

Chrome имеет наиболее заметную проблему с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...