【问题标题】:jQuery, how can I pass args to event handler?jQuery,我如何将 args 传递给事件处理程序?
【发布时间】:2009-08-04 22:28:57
【问题描述】:

如何将 args 传递给事件处理函数?这会在页面加载时运行该功能,这不是预期的效果。我需要这个例程“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.");
    }

【问题讨论】:

    标签: javascript jquery javascript-events


    【解决方案1】:

    使用绑定将额外的参数传递给事件监听器:

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

    【讨论】:

    • 酷,我会试试这个。看起来是正确的方法。谢谢!
    • 没问题。如果您在其他任何地方使用该过程,匿名函数可能是更简单的方法。
    【解决方案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 或其他什么,它应该与你的初始选择器一起更好地扩展。 =)

    【讨论】:

    • 从技术上讲,它执行的原因是因为当 jQuery 回调请求函数指针时,您传入了一个函数调用——这就是匿名函数起作用的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-23
    • 2010-11-02
    • 2011-05-02
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    相关资源
    最近更新 更多