选择名称为[]和值(jquery / javascript)的复选框

时间:2014-07-23 14:59:24

标签: jquery json forms checkbox jquery-selectors

我正在将表单保存为json对象,我在刷新或重新访问页面时用它来重建表单。它运行良好,但我在定位名称属性后面带有“[]”的复选框时遇到问题。

我的对象:{"product":{"checkboxname":["value1","value2"]}}

// Reset form values from json object
$.each(formStateObjects[presentFormElementID], function(name, val){

    var $el = $('[name="'+name+'"]');
    var type = $el.attr('type');

    switch(type){
        case 'checkbox':
            $el.attr('checked', 'checked'); // Only works for checkboxes with unique name
            break;
        case 'radio':
            $el.filter('[value="'+val+'"]').attr('checked', 'checked');
            break;
        default:
            $el.val(val);
    }
});

我需要以某种方式更改我的复选框选择器,或者只为具有共享名称的复选框创建一个新的复选框选择器。但我无法弄清楚如何。

----编辑:更新了我的代码-------------------------------------- ---

我使用以下代码,但现在它不能确保选中正确的名称。

// Reset form values from json object
$.each(formStateObjects[presentFormElementID], function(name, val){

    var $el = $("[name=" + name + "]");
    var type = $el.attr('type');


    // If we have a checkbox name with many values
    if(val instanceof Array) {
        checkboxArrayValues = val;
        $.each( checkboxArrayValues, function( intValue, currentValue ) {
            // Refine the selector checking for name
            var $hit = $("[value=" + currentValue + "]");
            $hit.prop('checked', true);
        });
    }

    switch(type){
        case 'checkbox':
            $el.prop('checked', true);
            break;
        case 'radio':
            $el.filter('[value="'+val+'"]').prop("checked", true);
            break;
        default:
            $el.val(val);
    }

});

1 个答案:

答案 0 :(得分:0)

根本不会这样做吗?

$.each(formStateObjects['product'], function (name, val) {
    var $el = $('[name^="' + name + '"]');
    var type = $el.attr('type');

    switch (type) {
        case 'checkbox':
        case 'radio':
            Object.prototype.toString.call(val) === '[object Array]' ? [].map.call(val, function(val){
                $el.filter('[value="' + val + '"]').prop('checked', true);
            }) : $el.filter('[value="' + val + '"]').prop('checked', true);
            break;
    }
});

DEMO