在向数组添加值后无法使函数正常工作

时间:2015-04-20 11:30:04

标签: jquery

您好,感谢您阅读本文。

我有这个小的查询验证,我对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);
    });
});

感谢您的时间和所有帮助。

2 个答案:

答案 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现已弃用。