使用jquery对任何事件调用带有参数的函数

使用jquery对任何事件调用带有参数的函数,jquery,Jquery,嗨,我只是想知道这是不是一个正确的方法。我知道我们可以使用对象符号传递数据并使用它。但我只是想知道下面的代码是否正确。我不确定下面的语法 function isValid(errMessage,errId,errClass){ alert(); if($("#"+errId).val()==""){ $("."+errClass).show(); $("."+errClass).html(errMessage); return f

嗨,我只是想知道这是不是一个正确的方法。我知道我们可以使用对象符号传递数据并使用它。但我只是想知道下面的代码是否正确。我不确定下面的语法

 function isValid(errMessage,errId,errClass){
    alert();
    if($("#"+errId).val()==""){
        $("."+errClass).show();
        $("."+errClass).html(errMessage);
        return false;
    }else{
        $("."+errClass).hide();
    }
}

$("#fname").on("blur",isValid("please enter first name","fname","ferror"));
我看到了如下语法:

function test(){
    alert("Hello World");
} 
$("#fname").on("blur",test);
检查此链接的输出


所以我只想弄清楚直接传递参数是否有效

您的代码调用
是有效的
方法,并将结果分配为
blur
处理程序,因此它不正确。你应该这样做

$("#fname").on("blur",function(){
    isValid("please enter first name","fname","ferror")
});
看来你还可以做其他的改进。对我来说最明显的是pass
this.id
,而不是harcoding id

$("#fname").on("blur",function(){
    isValid("please enter first name", this.id, "ferror")
});

您的代码调用
是有效的
方法,并将结果指定为
blur
处理程序,因此它不正确。你应该这样做

$("#fname").on("blur",function(){
    isValid("please enter first name","fname","ferror")
});
看来你还可以做其他的改进。对我来说最明显的是pass
this.id
,而不是harcoding id

$("#fname").on("blur",function(){
    isValid("please enter first name", this.id, "ferror")
});
可以将事件处理程序作为参数传递给事件侦听器:

$("#fname").on("blur", {
        msg: "please enter first name", 
        name: "fname", 
        error: "ferror"
    }, isValid);
然后,isValid函数可以处理来自事件对象的数据:

function isValid (event) {
    var errMessage = event.data.msg,
        errId = event.data.name,
        errClass = event.data.error;
    if ($("#"+errId).val()=="") {
        $("."+errClass).show();
        $("."+errClass).html(errMessage);
        return false;
    } else {
        $("."+errClass).hide();
    }
}
可以将事件处理程序作为参数传递给事件侦听器:

$("#fname").on("blur", {
        msg: "please enter first name", 
        name: "fname", 
        error: "ferror"
    }, isValid);
然后,isValid函数可以处理来自事件对象的数据:

function isValid (event) {
    var errMessage = event.data.msg,
        errId = event.data.name,
        errClass = event.data.error;
    if ($("#"+errId).val()=="") {
        $("."+errClass).show();
        $("."+errClass).html(errMessage);
        return false;
    } else {
        $("."+errClass).hide();
    }
}

是的,我知道这个。但我见过这样的语法:function test(){alert(“Hello World”)}$(“#fname”).on(“blur”,test);所以我只想弄清楚直接传递参数是否有效not@susheel字体恐怕我不确定你的问题是什么。您的代码无法正常工作。这里有两个工作选项。我认为我的语法无效。我只是想知道这是否存在。谢谢。@susheel:注意,不是将方法附加到blur,而是执行它。简言之,它并没有像你预期的那样起作用。所以我想我应该作为对象通过,或者按照你的方式:)是的,我知道这个。但我见过这样的语法:function test(){alert(“Hello World”)}$(“#fname”).on(“blur”,test);所以我只想弄清楚直接传递参数是否有效not@susheel字体恐怕我不确定你的问题是什么。您的代码无法正常工作。这里有两个工作选项。我认为我的语法无效。我只是想知道这是否存在。谢谢。@susheel:注意,不是将方法附加到blur,而是执行它。简言之,它并没有像你预期的那样起作用。因此,我认为我应该作为对象传递,或者按照您的方式传递:)$(“#fname”)。在(“blur”上,是有效的(“请输入名字”、“fname”、“ferror”);我知道还有其他选择。只是想知道这个语法是否合法。thanks@susheel事实并非如此。您的函数调用会生成一个结果-isValid(),且结果未定义。通过这种方式,您可以提供一个未定义的event handler.function test(){alert(“Hello World”)}$(“#fname”).on(“blur”,test)作为参数;这种语法是有效的,所以即使是参数也应该有效。但我错了。无论如何,谢谢:)$(“#fname”)。在(“blur”上有效(“请输入名字”、“fname”、“ferror”));我知道还有其他选择。只是想知道这个语法是否合法。thanks@susheel事实并非如此。您的函数调用会生成一个结果-isValid(),且结果未定义。通过这种方式,您可以提供一个未定义的event handler.function test(){alert(“Hello World”)}$(“#fname”).on(“blur”,test)作为参数;这种语法是有效的,所以即使是参数也应该有效。但我错了。无论如何,谢谢:)您的JSFIDLE使用函数调用,而不是对函数的引用。JSFIDLE使用函数调用,而不是对函数的引用。