в jQuery, если.изменение или.клавиша вверх()'



С помощью jQuery я хотел бы запустить функцию, когда либо .change() или .keyup() поднимаются.



что-то вроде этого.



if ( jQuery(':input').change() || jQuery(':input').keyup() )
{
alert( 'something happened!' );
}


EDIT



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

586   6  

6 ответов:

можно привязать к нескольким событиям, разделив их пробелом:

$(":input").bind("keyup change", function(e) {
    // do stuff!
})

docs здесь.

надеюсь, что это поможет. ура!

если вы когда-либо динамически генерировать содержимое страницы или загружать содержимое через AJAX, следующий пример действительно так, как вы должны идти:

  1. он предотвращает двойную привязку в случае, когда скрипт загружается более одного раза, например, в запросе AJAX.
  2. привязка живет на 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() а не другие методы по нескольким причинам:

  1. $.live() и $.die() являются устаревшими и были опущены из более поздних версий jQuery.
  2. мне нужно определить отдельную функцию (поэтому захламлять глобальную область видимости) и передать функцию как $.change() и $.keyup() отдельно, или пройти одно и то же объявление функции для каждой вызываемой функции; дублирование логики... Что абсолютно неприемлемо.
  3. если элементы когда-либо добавляются в 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

    Ничего не найдено.