2009-09-23 5 views
3

У меня есть выбор, который я хочу запускать различными функциями в зависимости от того, что выбрано. Я также использовал плагин flexselect http://rmm5t.github.com/jquery-flexselect/, чтобы преобразовать поле выбора в поле со списком. Результатом является поле ввода.jQuery: события при изменении ввода

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

Есть ли решение этой проблемы?

Спасибо!

+0

+1, потому что «когда текст окна ввода изменяется, а не размывается, но сразу же решение «+ @ pixeline» очень полезно для многих обстоятельств - не связано с «flexselect». – perfectionist

ответ

2

Это взлом, но вы можете изменить файл flexselect.js, чтобы поднять пользовательское событие, когда оно изменит значение текстового поля. После любого места в файле, который называет «this.input.val (» (как линия 231) вставить: триггер («myCustomEvent»), а затем из существующего кода привязки к нему:

$('#selector').bind('myCustomEvent',function(){ 
     alert('myCustomEvent'); 
}); 
+0

Отличное предложение, полностью забыл, что вы могли это сделать! – Jourkey

0

Почему вы не используете комбинацию onblur и onkeyup?

Конечно, вы также можете создать таймер (window.setTimeout) - не очень приятный или поощряющий способ справиться с этим, но он должен работать.

+0

Это потому, что onblur требует размытия, и это большая проблема юзабилити. быть последним прибежищем ... – Jourkey

7

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

$('#selector').bind('keyup mouseup change',function(e){ 
     alert(e.type); 
}); 
+0

для записи это keyup changeup mouseap – Jourkey

+0

исправлено, спасибо! – pixeline

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