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];
}