jQuery - 将表单复制到相同的表单

时间:2012-09-05 19:03:09

标签: javascript jquery forms

我想将现有表单复制到另一个表单。我发现这个question适用于普通输入,但它会在我的复选框上引发错误

我正在使用的jQuery函数(from)是

(function($) {
    $.fn.copyNamedTo = function(other) {
        return this.each(function() {
            $(':input[name]', this).each(function() {
                $('[name=' + $(this).attr('name') +']', other).val($(this).val())
            })
        })
    }
}(jQuery));

错误是:

Uncaught Error: Syntax error, unrecognized expression: [name=cartype[]] 

复选框的排列如下:

<input type="checkbox" name="cartype[]" id="cartype_10" value="10">4x4
<input type="checkbox" name="cartype[]" id="cartype_11" value="11">Saloon

我希望这是由于名称中的[],但无法弄清楚该怎么办。

2 个答案:

答案 0 :(得分:1)

您必须使用[](如here所示)替换您姓名中的\\[\\], (如你所知)他们在jQuery选择器中有特殊含义。

$('[name=' + $(this).attr('name').replace(/([\[\]])/g, '\\\\$1') +']', other).val($(this).val())

请注意,从技术上讲,您还应该拥有$('[name="val"]')形式的选择器(请注意属性值周围的引号)。 jQuery似乎总是对此很宽容,但它符合the docs

要修复复选框和单选按钮,您需要设置它们的checked属性,而不是更改值。您可以将功能更改为此;

$.fn.copyNamedTo = function(other) {
    return this.each(function() {
        $(':input[name]', this).each(function() {
            var target = $('[name=' + $(this).attr('name').replace(/([\[\]])/g, '\\\\$1') +']', other);

            // Radios have the same name as each other, so filter based on value
            // Checkboxes are in the same boat here due to the naming conventions shown in the OP.
            if ($(this).is(':checkbox, :radio')) {
                target.filter('[value="' + this.value + '"]').prop('checked', this.checked);
            } else {
                target.val($(this).val());
            }
        })
    })
}

答案 1 :(得分:0)

尝试使用data属性。

data-name="cartype[]"

使用:$(this).data('name')

抓住它