附加改变功能

时间:2014-05-09 14:29:58

标签: javascript jquery

我有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

2 个答案:

答案 0 :(得分:1)

我想你已经明白了。你需要做的就是这个:

clone_checkboxes_values('foo_form', 'foo_select', 'baz_select');

也许它无效,因为您在'之前错过了baz_select

http://jsfiddle.net/5a3Jj/1/

答案 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