1

我正在使用此功能创建一个切换按钮:http: //pastebin.com/gLkeB7pi 然后我正在克隆此切换按钮以用于类似用途 - 但不完全相同。为此,我需要相同的“单击”行为(即选择/取消选择和复选框),但在新的克隆按钮上。

所以我正在尝试这个:首先,我修改了 createToggleButton:http : //pastebin.com/tFZVafwE复选框被选中。然后我这样做了:

var toggle = toggleButton.clone(true); //toggleButton is the toggle inside the div created with createToggleButton()
$(toggle).unbind('click');
$(toggle).bind('click',
    {chkbx: $(toggle).find('input[type=checkbox]')},
    function(evt){toggle.toggle(evt)}
);

但是,我完全不知道会发生什么。单击时,新的切换按钮会向上滑动(?!),并且根本不执行 toggle.toggle 函数(我添加了一个 console.log)。所以:

1)我在想正确的方法来做我想做的事吗?

2)点击时实际执行了哪些代码,为什么?

4

2 回答 2

0

关于切换代码我不能说太多,但如果你想复制一个处理程序,通常最好先将处理程序保存到一个变量 f.ex 中:

var handler = function(e) {
    // do stuff
};

toggleButton.bind('click', { john: 'doe' }, handler);

// now clone, attach the same hander but pass some other data

var $clone = toggleButton.clone(); // don’t copy events
$clone.bind('click', { foo: 'bar' }, handler);

如果您想“找到”您之前附加的处理程序,您可以使用$._dataf.ex:

var handler = $._data( toggleButton[0], 'events' ).click[0].handler;
于 2012-11-20T17:04:05.957 回答
0

好的,我明白了。如果有人偶然发现同样的问题:

首先 - hacky 且未经测试 - 解决方案:如果您想(或需要)使用clone,请首先注意一个名为 JS Object 的方法toggle已经存在。那是在我的情况下被调用的,而不是toggle.toggle我创建的。此外,在我的 createToggleButton 函数中创建的方法不是用clone. 所以,正如大卫所说,它最好与$._data( toggleButton[0], 'events' ).click[0].handler;. 即使那样,在我的情况下它也不会起作用,因为toggle.toggle调用toggle.activetoggle.deactive两者在这种情况下都不存在。所以必须不要在处理程序中调用任何辅助函数。

第二种解决方案(更好):不要使用clone. 重用createToggleButton并手动添加所需的 HTML 属性(请参阅jQuery:如何复制一个元素的所有属性并将它们应用到另一个元素?)。

于 2012-11-22T14:00:12.760 回答