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

时间:2013-05-28 12:39:46

标签: jquery

您只是想知道这是否是正确的方法。我知道我们可以使用对象表示法传递数据并使用它。但只是想知道下面的代码是否正确。我不确定以下语法。

 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);

检查此链接是否输出 http://jsfiddle.net/susheel61/M2jsX/

所以只想弄清楚传递参数是否直接起作用。

2 个答案:

答案 0 :(得分:3)

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

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

看来你还可以做其他改进。对我来说最明显的是传递this.id而不是编码id

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

答案 1 :(得分:1)

您可以将arguments作为事件监听器的参数传递给事件处理程序:

$("#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();
    }
}