jQuery, как я могу передать аргументы обработчику событий?

Как я могу передать аргументы в функцию обработчика событий? Это запускает функцию загрузки страницы, которая не является желаемым эффектом. Мне нужно, чтобы эта подпрограмма "validateText" работала с несколькими различными текстовыми полями, выпадающими комбинациями. Могу ли я повторно использовать "validateText" вместо создания одного для каждой комбинации текста и выпадающего меню?

//add blur event handler to the textbox with jQuery when the page is finished loading
    $(document).ready(function() {
        $("#myTextbox").blur(validateText($("#myTextbox"), $("#Select1")));
    })


    function validateText(textbox, dropdown) {

        var message = $("#message");
        var isValid = false;
        //get the value the user type in
        var textboxValue = $(textbox).val();

        //get the options from the lookup
        var options = $("option", dropdown);

        //loop through the options and compare it to "value"
        options.each(function() {
            var optValue = $(this).val();
            if (optValue === textboxValue) {
                isValid = true;
            }
        });

        if (!isValid)
            message.text(textboxValue + " is not a valid value from the list.");
        else
            message.text(textboxValue + " is perfectly valid.");
    }

2 ответа

Решение

Причина, по которой он вызывается при загрузке, заключается в том, что передача имени функции с аргументами активно вызывает его. Вы можете эффективно имитировать то, что ищете, обернув вызов validateText в анонимную функцию, подобную этой.

$(document).ready(function() {
    $("#myTextbox").blur(function(){
        // Since in your original example you used $("#myTextbox") as an arg, this mimics it
        validateText($(this), $("#Select1"));
    });
});

Анонимная функция, поскольку она использует ключевое слово "this", должна немного лучше масштабироваться с вашим начальным селектором, если вы измените его с #myTextbox на textarea или что-то еще. знак равно

Используйте привязку для передачи дополнительных параметров слушателю событий:

http://docs.jquery.com/Events/bind

$(document).ready(function() {
    $("#myTextbox").bind("blur", [ $("#myTextBox"), $("#Select1")], validateText);
})

Затем получите доступ к данным из event.data:

function validateText(event) {
  textBox  = event.data[0];
  dropdown = event.data[1];
}
Другие вопросы по тегам