1

この関数でトグル ボタンを作成しています: http://pastebin.com/gLkeB7pi 次に、このトグル ボタンを同様の用途で複製していますが、まったく同じではありません。そのためには、同じ「クリック」動作 (つまり、選択/選択解除 & チェックボックス) が必要ですが、新しい複製されたボタンが必要です。

だから私はこれを試しています: 最初に、私は createToggleButton を変更しました: http://pastebin.com/tFZVafwE 基本的に、event.data によってクリック ハンドラーにチェックボックス パラメーターを渡し、その結果、内部関数を変更して、新しいトグルチェックボックスがオンになっています。それから私はこれをしました:

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);

以前にアタッチしたハンドラーを「検索」したい場合は$._data、f.exを使用できます。

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

わかった。誰かが同じ種類の問題に出くわした場合:

最初 - ハッキーでテストされていません - 解決策:を使用する (または使用する必要がある) 場合はclone、最初に呼び出された JS オブジェクト メソッドがtoggle既に存在することに注意してください。それは、私が作成したのではなく、私の場合に呼び出されたものでしたtoggle.toggle。さらに、私の createToggleButton 関数で作成されたメソッドは でコピーされませんclone。したがって、David が言ったように、$._data( toggleButton[0], 'events' ).click[0].handler;. それでも、私の場合、このコンテキストにはtoggle.toggle呼び出しtoggle.activeまたはその両方が存在しないため、機能しません。toggle.deactiveそのため、ハンドラーで副次的な関数を呼び出さないことが必要です。

2番目の解決策(より良い):使用しないでくださいclone。必要な HTML 属性を再利用createToggleButtonし、手動で追加します ( jQuery: How to copy all attributes of one element and apply them to another? を参照)。

于 2012-11-22T14:00:12.760 に答える