Подтвердить что ты не робот

JQuery 'if.change() или .keyup()'

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

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

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

ИЗМЕНИТЬ

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

4b9b3361

Ответ 1

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

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

docs здесь.

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

Ответ 2

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

  • Он предотвращает двойное связывание в случае, когда script загружается более одного раза, например, в запросе 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.

Ответ 3

Сделайте это.

$(function(){
    var myFunction = function()
    {
        alert("myFunction called");
    }

    jQuery(':input').change(myFunction).keyup(myFunction);
});

Ответ 4

Вы можете подписаться на события изменения и keyup:

$(function() {
    $(':input').change(myFunction).keyup(myFunction);
});

где myFunction - это функция, которую вы хотели бы выполнить:

function myFunction() {
    alert( 'something happened!' );
}

Ответ 5

Это не то, как работают события. Вместо этого вы даете им функцию, которая будет вызвана, когда они произойдут.

$("input").change(function() {
    alert("Something happened!");
});

Ответ 6

Напишите одну функцию и вызовите ее для обоих из них.

function yourHandler(e){
    alert( 'something happened!' );        
}
jQuery(':input').change(yourHandler).keyup(yourHandler);

Функции регистрации событий change() и keyup() возвращают исходный набор, поэтому их можно связать.