0

既存のフォームを別のフォームにコピーしたい。通常の入力で機能するこの質問を見つけましたが、チェックボックスでエラーが発生します

私が使用しているjQuery関数(から)は

(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

これは名前のせいである[]と思いますが、どうしたらよいかわかりません。

4

2 に答える 2

1

(ご存知のように)jQueryセレクターで特別な意味を持っているため、名前のandを(ここに配置されているように) [andに置き換える必要があります。]\\[\\]

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

技術的には、フォームのセレクターも必要であることに注意してください$('[name="val"]')(属性値の前後の引用符に注意してください)。jQueryは常にこれについて寛大であるように見えましたが、ドキュメントに準拠しています。

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());
            }
        })
    })
}
于 2012-09-05T19:06:33.097 に答える
0

data属性を使用してみてください。

data-name="cartype[]"

そして、以下を使用してそれをつかみます:$(this).data('name')

于 2012-09-05T19:04:21.617 に答える