Вопрос по javascript, jquery – Обнаружение взаимодействия с полем выбора

2

Как (используя javascript или jQuery) я могу определить, когда значение было выбрано из поля выбора, даже если оно имеет ту же опцию, что была выбрана ранее (т.е. событие изменения не вызывается).

В основном мне это нужно для взаимодействия мыши, но решение, которое работает и для клавиатуры, было бы удобно.

Скорее всего, вы пытаетесь пойти по какому-то пути, который является неправильным. Могу ли я спросить, почему вы хотите такое поведение? Лично я против изменения поведения браузера. Tyler Crompton
@Tyler Crompton У меня есть несколько строк в таблице, заполненной Backbone, и некоторые столбцы содержат поле выбора для отображения и позволяют изменять значение. Я хочу сохранить временную метку для времени, когда пользователь последний раз взаимодействовал с записью, и важно записывать даже взаимодействия, которые не приводят к изменениям. По сути, для моих целей пользователь, который оценивает и рассматривает возможность изменения значения, так же важен, как и его изменение. wheresrhys

Ваш Ответ

3   ответа
0

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

работает с мышью, не работает с клавиатуройhttp://jsfiddle.net/w4DEJ/4/

какой браузер вы используете? не работает на моей стороне .. я использую хром ..
Я могу подтвердить, что он не работает в Chrome, но работает в IE
работает в firefox 12
0

Единственное решение, которое я нашел работоспособным, это вызватьchange событие, установив значениеselect к другомуmousedown, В разметке я создал одну дополнительную опцию (то есть первый дочерний элемент) и сделал ее скрытой (отлично скрывается в Chrome / FF / Safari, IE как обычно). Так это выглядит хорошо.

<select>
    <option style="display: none"></option>
    <option>First</option>
    <option>Second</option>
    <option>Third</option>
</select>​

Затем с помощью jQuery мы связываемchange а такжеmousedown события таким образом, что когдаmousedown триггеры,select сбрасывает его значение на значение скрытой опции.

$("select").on({
    change: function() {
        console.log($(this).val());
    },
    mousedown: function() {
        $(this).val($(":first", this).val());
    }
});​

DEMO: http://jsfiddle.net/LzNrS/

UPDATE: Чтобы сохранить выбранное значение, когда пользователь нажал наselect но решили не выбирать ничего, мы можем немного изменить код, добавивblur событие и обновлениеmousedown.

var special = ""; // special hidden option value
var value = ""; // temporary variable

$("select").on({
    change: function() {
        console.log($(this).val());
    },
    mousedown: function() {
        if (this.value == special) {
            $(this).val(value);
            return;
        }
        value = this.value;
        $(this).val(special);
    },
    blur: function() {
        if (this.value == special)
            $(this).val(value);
    }
});​

DEMO: http://jsfiddle.net/LzNrS/1/

@wheresrhys Это должно работать во что бы то ни стало :)
Также рассмотрите навигацию клавиатуры как упомянутый OP. Хорошая работа.
Хорошее решение. В конце концов, так как решение не представляется полностью простым, я решил обойти проблему, отобразив текущее значение в соседней метке и выбрав команду «обновить это значение», а затем вернуться к параметру по умолчанию », пожалуйста, подтвердите статус». после каждого события изменения. wheresrhys
0

Я думаю, что функция focus () поможет вам ... попробуйте это: http://api.jquery.com/focus/

Я думаю, что вы неправильно поняли вопрос wheresrhys

Похожие вопросы