使用 .on 函数运行 jQuery 声明函数

Running jQuery declared function with .on function

本文关键字:函数 声明 jQuery 运行 使用 on      更新时间:2023-09-26

目前这个函数工作:

    $("#email_address_input").on('focusout', function(){
        emailValidationCheck($(this));
    });
    function emailValidationCheck(e){
        ...
    }

所以基本上,如果电子邮件地址输入元素被聚焦,那么就会运行一个匿名函数,该函数调用声明的函数emailValidationCheck(当然,该声明的函数将电子邮件地址输入元素作为参数)。

该匿名函数感觉是多余的。 它所做的只是调用声明的函数,所以在我看来它应该被取出。

因此,我尝试做的是在事件触发时直接调用声明的函数,而不是调用匿名函数,后者又调用该声明的函数。 像这样(警告,它没有按预期工作):

    $("#email_address_input").on('focusout', emailValidationCheck($(this)));

问题:我怎样才能让它工作? 还是原始答案是最佳实践? 基本上我要做的是:当 focusout 事件在指定元素上触发时,我想执行 emailValidationCheck 函数,其中传入的参数是发生所有这些事情的元素。

谢谢!

不需要使用匿名函数作为事件的回调。您可以轻松地调用已定义的函数,而无需使用 () 前体(因为包含 这将基本上将 emailValidationCheck 的返回值传递给回调,而不是函数引用本身)。例如:

$("#email_address_input").on('focusout', emailValidationCheck);

现在,emailValidationCheck函数将在函数构造函数中定义的e变量中接收事件。

由于该函数已绑定为回调,因此$(this)在其中也可用。例如:

function emailValidationCheck(e)
{
    console.log( e );       // logs the event
    console.log( $(this) ); // logs the jQuery object that lost focus
}

jsFiddle 演示

这不是javascript的工作方式。.on() 函数需要一个函数作为参数。可以传递匿名函数或函数名称。一旦你把 () 放在最后,它就会内联执行函数并将结果传递给 .on() 函数。