我有3种形式: foo , bar 和 baz ,其中包含相同的复选框:
<form id="foo_form" method="post" action="foo">
<input class="foo checkbox" id="foo_select_1" name="ids[]" type="checkbox" value="1" />
<input class="foo checkbox" id="foo_select_2" name="ids[]" type="checkbox" value="2" />
<input class="foo checkbox" id="foo_select_3" name="ids[]" type="checkbox" value="3" />
...
<input type="submit" value="action 1" />
</form>
然后我有这样的功能:
function clone_checkboxes_values(src_form, src_prefix, dst_prefix) {
$('#' + src_form + ' input:checkbox').change(function() {
$('#' + dst_prefix + this.id.replace(src_prefix, '')).prop('checked', this.checked);
});
}
我跑的:
clone_checkboxes_values('foo_form', 'foo_select', 'bar_select');
它会将 foo 上的每个复选框更改为栏。
我希望再次调用clone_checkboxes_values
将更改复制到 baz (不要覆盖change(function(){})
,但要附加到它。我不知道怎么做做吧。请帮忙。
这是所有预付费的Fiddle。
答案 0 :(得分:1)
我想你已经明白了。你需要做的就是这个:
clone_checkboxes_values('foo_form', 'foo_select', 'baz_select');
也许它无效,因为您在'
之前错过了baz_select
。
答案 1 :(得分:0)
这不起作用吗?
clone_checkboxes_values('foo_form', 'foo_select', 'baz_select');
默认情况下,jQuery不会覆盖事件处理程序。换句话说,对change()的任何后续调用只会向前一个添加新的事件处理程序。它对其他事件绑定函数(例如click())的作用相同。事件处理程序将按照它们绑定到事件的顺序依次运行。
换句话说,如果我理论上执行以下调用,
$(<selector>).bind(<event>, <function1>)
$(<selector>).bind(<event>, <function2>)
发生<event>
时,function1
将被执行,然后会跟随function2
。