2013-07-30 2 views
2

У меня есть поле выбора, которое имеет логику на клавиатуре и меняет, что-то делать. Есть ли способ проверить, как это было изменено?Обнаружить, как был изменен выбор

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

Для тех, кто ищет для моего точного решения

http://aaronscherer.me/blog/2013/07/31/jquery-roll-to-next-input/

ответ

3

Да - вы можете слушать любое событие на любом элементе в DOM. Отъезд this fiddle в качестве отправной точки. Вот full list of mouse events и keyboard events вы можете слушать.

HTML

<select class="my-select-1"> 
    <option value="1">First</options> 
    <option value="2">Second</options> 
</select> 

<select class="my-select-2"> 
    <option value="1">A choice</options> 
    <option value="2">Another choice</options> 
</select> 

JQuery

$(document).ready(function() { 

    $(".my-select-1").on("click", function(event){ 
     alert('Do something - click event'); 
    }); 

    $('.my-select-2').on('keypress', function(e) { 
     var code = (e.keyCode ? e.keyCode : e.which); 
     if(code == 13) { //Enter keycode 
      alert('Do something - enter key press'); 
     }  
    }); 

}); 

В приведенном выше примере, $(".my-select-1) это селектор, это может быть что угодно (идентификатор, тип элемента, и т.д.). Дополнительная информация о селекторах here. Следующая часть, .on("mousedown" присоединяет функцию обработчика событий для одного или нескольких событий к выбранным элементам - в этом случае только одно событие, mousedown. Больше информации о here.

Второй пример - немного более причудливый, поскольку мы должны определить, какой ключ был нажат, но кроме этого использует ту же концепцию. Вы можете найти очень продолжительное обсуждение об этом на this post, но обратите внимание на 1.7 on является предпочтительным методом (не bind).

+0

Клянусь, я подумал, что щелчок произошел при первом щелчке выбора ... Ну, это в значительной степени решило мой вопрос, я буду использовать это, возможно, с ответом @ undefined, присоединив два оператора 'on' к одному – Ascherer

+0

Да, я просто собирался сказать, если вы приведете пример своего кода, это поможет нам дать вам лучшее предложение. В зависимости от того, как вы подходите к нему, будет работать также и метод @undefined - путем размещения переключателя или операторов внутри функции, которые он предлагает, чтобы иметь разные типы поведения для разных событий. – MaxPowers

+0

Да, это идея. Спасибо – Ascherer

0

Вы можете использовать OnChange событие, что-то вроде этого:

$(document).on('change','#your_select',function() { 
    //do something 
}) 
+1

OP хочет уметь реагировать на определенные режимы изменения; I.e клавиатура против мыши. Вместо того, чтобы просто отвечать на изменения полностью –

1

Если вы хотите знать тип события, вы можете просто использовать type свойство event объекта:

$('select').on('change keyup ...', function(event) { 
    var type = event.type; 
    // ... 
}); 
+0

Есть ли определенный список возможностей event.type? – Ascherer

+0

Да - длинный список, найденный по адресу http://api.jquery.com/category/events/ – MaxPowers

+0

ах. Странно, они, похоже, не упоминают псевдонимы. например. Blur фактически имеет тип 'focusout' – Ascherer

Смежные вопросы