Javascript:将函数参数与字符串组合以引用变量
我有这样的VAR:Javascript:将函数参数与字符串组合以引用变量,javascript,jquery,function,Javascript,Jquery,Function,我有这样的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("(Req
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;
}
}
还有一个当前不起作用的函数,如下所示:
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(function () {
validateRequired(this, cardholderInfo);
});
function validateRequired(field, fieldInfo){
/* validation stuff */
}
并修改函数以获取第二个参数:
cardholder.keyup(function () {
validateRequired(this, cardholderInfo);
});
function validateRequired(field, fieldInfo){
/* validation stuff */
}
要绑定的函数!如果每次调用时都需要向其传递参数,则需要使用或函数表达式:
cardholder.keyup(functio(e) {
return validateRequired(cardholder, cardholderInfo);
});
此外,您还需要validateRequired函数中的第二个参数来填充fieldInfo变量:
function validateRequired(field, fieldInfo){
…
您必须在keyup中传递函数的引用,而不必调用函数
cardholder.keyup(function(){
validateRequired(cardholder)
});
不需要全局变量:
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"));
});
});
使用两个参数并传入CardingInfo,或者使用javascripts词法作用域并仅在函数中使用CardingInfo,如果函数定义在与CardingInfo相同的作用域中,或者定义在从CardingInfo开始的作用域链的下一个作用域中。让我们直截了当地说:您需要什么?我认为有一种更简单的方法可以让你尝试…@pythonian29033请不要提醒,学习如何使用控制台,并使用Chrome中的console.logfield和Firefox中的firebug记录对象。你可以点击记录的对象来检查它的属性。在我看来,console.dir适合Firefox。好孩子!废话为什么我没有看到?这个在keyup中不是jquery对象,所以尝试在上面执行.val会破坏代码。@HMR,你是对的,知道了这一点,验证函数必须将其转换为jquery对象,如果它想使用.val,可能还有$field。我的答案是展示如何将值传递给函数,而不是实际执行验证。这是一个很好的答案,只是提醒OP它将破坏validateRequired函数,除非调用类似的函数:validateRequired$this,CardingInfo;在validate函数中编辑代码,这比问题中的代码更麻烦谢谢,没有看到field和fieldinfo之间的区别。更改了代码