2013-05-08 72 views
0

我瓦尔看起来像这样的:的Javascript:合并功能参数与字符串参考VAR

var cardholder = $("#cardholder"); 
var cardholderInfo = $("#cardholder-Info"); 

和一个函数(不当前工作),看起来像这样:

function validateRequired(field){ 
    //if it's NOT valid 
    if(field.val().length < 1){ 
     field.addClass("field_error"); 
     fieldInfo.text("(Required)"); 
     fieldInfo.addClass("error"); 

     return false; 
    } 
    //if it's valid 
    else{ 
     field.removeClass("field_error"); 
     fieldInfo.text(""); 
     fieldInfo.removeClass("error"); 
     return true; 
    } 
} 

其中我访问诸如:

cardholder.keyup(validateRequired(cardholder)); 

我到处找,但我无法找到我需要的,我真的不知道我守ld正在寻找。

我可以使用field值来访问直接cardholder变种。但我也想用field的值来引用cardholderInfo,这样我就可以在函数中操作那个元素。

+1

要么使用两个参数,并通过在cardholderInfo,或使用JavaScript的词法作用域的,只是使用cardholderInfo在你的功能,如果该功能是在相同的范围内cardholderInfo定义或者在范围链中从cardholderInfo开始的范围内。 – 2013-05-08 14:51:36

+0

让我们直截了当:你需要什么?我认为有一个更简单的方法,你正在尝试... – Kiruse 2013-05-08 14:53:06

+0

@ pythonian29033请请永远不要警惕,学习如何使用控制台和登录对象与console.log(字段)在Chrome和Firefox与萤火虫你可以点击记录的对象来检查它的属性。 – HMR 2013-05-08 14:58:06

回答

3

你会这样调用的函数,将第二个参数:

cardholder.keyup(function() { 
    validateRequired(this, cardholderInfo); 
}); 

和修改功能,采用第二个参数:

function validateRequired(field, fieldInfo){ 
    /* validation stuff */ 
} 
+0

斑点儿子! 废话为什么我没有看到? – pythonian29033 2013-05-08 14:53:31

+0

这在keyup中不是一个jquery对象,所以试图做.val()会破坏代码。 – HMR 2013-05-08 15:03:45

+0

@HMR,你是对的,并且知道这个验证函数如果想要使用'.val()'(也许用'$(field)''),就必须把它变成一个jQuery对象。我的答案是显示如何将值传递给函数(这就是要求的),而不是实际进行验证。 – 2013-05-08 15:07:04

1

Don't call要绑定的功能!如果你需要在每次调用时的参数传递给它,你要么需要使用bind或函数表达式:

cardholder.keyup(functio(e) { 
    return validateRequired(cardholder, cardholderInfo); 
}); 

而且你需要在你的validateRequired功能的第二个参数,以获得fieldInfo变量填充:

function validateRequired(field, fieldInfo){ 
    … 
1

你要通过在KEYUP函数参考,您不必调用函数

cardholder.keyup(function(){ 
    validateRequired(cardholder) 
}); 
2

无需全局变量:

function validateRequired($cardInfo){ 
    // You can guess what $cardInfo is 
    //if it's NOT valid 
    if(this.val().length < 1){ 
     this.addClass("field_error"); 
     $cardInfo.text("(Required)"); 
     $cardInfo.addClass("error"); 

     return false; 
    } 
    //if it's valid 
    else{ 
     this.removeClass("field_error"); 
     $cardInfo.text(""); 
     $cardInfo.removeClass("error"); 
     return true; 
    } 
} 


$(document).ready(function(){ 
    $("#cardholder").keyup(function(){ 
    validateRequired.call($(this),$("#cardholder-Info")); 
    }); 
}); 
+0

在validate函数中编辑你的代码,它比代码 – pythonian29033 2013-05-08 14:57:59

+0

更有价值谢谢,没有看到field和fieldinfo之间的区别。改变了代码 – HMR 2013-05-08 15:02:32