我想将现有表单复制到另一个表单。我发现这个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
我希望这是由于名称中的[]
,但无法弄清楚该怎么办。
答案 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')