您好,感谢您阅读本文。
我有这个小的查询验证,我对jquery相当新,所以我对我到目前为止的成功感到高兴。
var btnResultv2 = $('#btnResultv2');
btnResultv2.attr("disabled", "disabled");
var FieldArrayv2 = [
'txtnamev2',
'txtpassv2',
'txtpass2v2'
];
FieldArrayv2.forEach(function (id) {
$('#' + id).bind('input propertychange', function () {
ValidateFieldsV2(FieldArrayv2, btnResultv2);
});
});
function ValidateFieldsV2(paths, button) {
var checker = false
$.each(paths, function (index, value) {
//alert($('#' + value).val().length);
var label = $("label[for='" + $('#' + value).attr('id') + "']");
if ($('#' + value).val().length < 1) {
label.text("* Required");
label.show();
checker = true
}
else {
label.hide();
}
});
if (checker != true) {
button.removeAttr("disabled");
} else {
button.attr("disabled", "disabled");
}
};
现在我想像下面那样更改数组,这样我就可以在我的验证中添加一个lenght参数。
FieldArrayv3[name] = [
{ name: 'txtnamev3', length: 3 },
{ name: 'txtpassv3', length: 4 }
];
不确定这是否是100%更改数组的正确方法,但我的问题是我如何使下面的代码能够使用新数组(或另一个执行相同操作的数组)
FieldArrayv2.forEach(function (id) {
$('#' + id).bind('input propertychange', function () {
ValidateFieldsV2(FieldArrayv2, btnResultv2);
});
});
感谢您的时间和所有帮助。
答案 0 :(得分:0)
通过将字符串数组更改为对象数组,foreach中的参数现在是对象而不是字符串id,因此您需要修改jQuery选择器,如下所示:
FieldArrayv2.forEach(function (obj) {
$('#' + obj.name).bind('input propertychange', function () {
ValidateFieldsV2(FieldArrayv2, btnResultv2);
});
});
还需要修改ValidateFieldsV2
函数,因为value
现在是一个对象而不是一个字符串。例如,在这一行:
var label = $("label[for='" + $('#' + value).attr('id') + "']");
// ^^ should be value.name
if ($('#' + value).val().length < 1) {
// ^^ should be value.name
这假设你的数组如下:
FieldArrayv2 = [
{ name: 'txtnamev3', length: 3 },
{ name: 'txtpassv3', length: 4 }
];
答案 1 :(得分:0)
此...
FieldArrayv3[name] = [
{ name: 'txtnamev3', length: 3 },
{ name: 'txtpassv3', length: 4 }
];
...不是你如何构建一个对象数组。你是在追求......之类的东西。
var FieldArrayv3 = [
{ name: 'txtnamev3', length: 3 },
{ name: 'txtpassv3', length: 4 }
];
您未在声明中设置“密钥”。但是使用对象数组没有“键”。您将需要像这样查询...
FieldArrayv3.forEach(function (field) {
$('#' + field.name).on('input propertychange', function () {
ValidateFieldsV2(FieldArrayv2, btnResultv2);
});
});
我还将您的bind
方法更改为on
,因为bind
现已弃用。