2009-08-04 48 views
7

如何将参数传递给事件处理函数?这会在页面加载时运行该功能,这不是预期的效果。我需要这个例程“validateText”来运行几个不同的文本框,下拉组合。我可以重复使用“validateText”,而不是为每个文本/下拉组合创建一个?jQuery,我怎样才能传递参数给事件处理程序?

//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."); 
    } 

回答

5

它在加载时调用的原因是因为用参数移交函数名主动调用它。你可以通过在匿名函数中包装调用validateText来有效地模仿你正在寻找的东西。

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

匿名函数,因为它是使用“这个”关键字,应该扩大一点更好地与你最初的选择,如果你从#myTextbox将其更改为文本区域或什么的。 =)

+0

感谢布赖恩。这很好! – Hcabnettek 2009-08-04 22:55:42

+0

从技术上讲,它正在执行的原因是因为当jQuery回调请求函数指针时传递函数调用 - 这就是匿名函数工作的原因。 – Nic 2009-08-12 06:16:31

11

使用结合到额外的参数传递给一个事件监听器:

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]; 
} 
相关问题