в jQuery, если.изменение или.клавиша вверх()'
С помощью jQuery я хотел бы запустить функцию, когда либо .change() или .keyup() поднимаются.
что-то вроде этого.
if ( jQuery(':input').change() || jQuery(':input').keyup() )
{
alert( 'something happened!' );
}
EDIT
Извините, я забыл упомянуть. Оба .change() и .keyup() нужно, чтобы некоторые переменные были в области видимости.
6 ответов:
можно привязать к нескольким событиям, разделив их пробелом:
$(":input").bind("keyup change", function(e) { // do stuff! })docs здесь.
надеюсь, что это поможет. ура!
если вы когда-либо динамически генерировать содержимое страницы или загружать содержимое через AJAX, следующий пример действительно так, как вы должны идти:
- он предотвращает двойную привязку в случае, когда скрипт загружается более одного раза, например, в запросе AJAX.
- привязка живет на
bodyдокумента, поэтому независимо от того, какие элементы добавляются, перемещаются, удаляются и повторно добавляются, все потомкиbodyсоответствие заданному селектору сохранится правильное связывание.Код:
// Define the element we wish to bind to. var bind_to = ':input'; // Prevent double-binding. $(document.body).off('change', bind_to); // Bind the event to all body descendants matching the "bind_to" selector. $(document.body).on('change keyup', bind_to, function(event) { alert('something happened!'); });Пожалуйста, обратите внимание! Я использую
$.on()и$.off()а не другие методы по нескольким причинам:
$.live()и$.die()являются устаревшими и были опущены из более поздних версий jQuery.- мне нужно определить отдельную функцию (поэтому захламлять глобальную область видимости) и передать функцию как
$.change()и$.keyup()отдельно, или пройти одно и то же объявление функции для каждой вызываемой функции; дублирование логики... Что абсолютно неприемлемо.- если элементы когда-либо добавляются в DOM,
$.bind()не динамическая привязка к элементам по мере их создания. Поэтому если вы привязываетесь к:inputа затем добавьте вход в DOM, что метод привязки не привязан к новому входу. Затем вам нужно будет явно отменить привязку, а затем повторно привязать все элементы в DOM (в противном случае вы в конечном итоге будете дублировать привязки). Этот процесс необходимо будет повторять каждый раз, когда вход был добавлен в DOM.
сделать это.
$(function(){ var myFunction = function() { alert("myFunction called"); } jQuery(':input').change(myFunction).keyup(myFunction); });
вы можете подписаться на изменения и ключевые события:
$(function() { $(':input').change(myFunction).keyup(myFunction); });здесь
myFunction- это функция, которую вы хотели бы выполнить:function myFunction() { alert( 'something happened!' ); }
это не то, как работают события. Вместо этого вы даете им функцию для вызова, когда они происходят.
$("input").change(function() { alert("Something happened!"); });
напишите одну функцию и вызовите ее для них обоих.
function yourHandler(e){ alert( 'something happened!' ); } jQuery(':input').change(yourHandler).keyup(yourHandler);функции регистрации событий change() и keyup() возвращают исходный набор, поэтому они могут быть скованы.
Comments