2

前のセットの [続行] ボタンをクリックすると、一度に 1 つずつ表示される 3 つのフィールド セットがあります。また、最近閉じたフィールドセットの親に別の編集ボタンを追加しています。編集ボタンの目的は、誰かがその特定のフィールドセットを開くことができるようにすることです。

私が抱えている問題は、編集ボタンをクリックしても、そのセット内のフィールドセットが開かないことです。残りのコードなしで次のコードを使用すると、問題なく動作するため、残りのコードで動作しない理由がわかりません。

    $('.edit').click(function(){
    $(this).closest('.ap_sectionblock').find("fieldset").toggle();
});

ここに私が使用しているコードがあります:

http://jsfiddle.net/joseph_a_garcia/eFf9d/

どんな助けでも大歓迎です。ありがとう。

4

2 に答える 2

4

イベント委任を使用する必要があります。編集ボタンは動的に作成され、DOM に追加されます。ただし、クリック イベントは、まだ存在しない場合に Document ready にバインドされます。そのため、ドキュメント ヘッドまたは任意の時点で DOM に存在するその他のコンテナーにイベントをアタッチして、指定されたコンテナーから将来作成される編集ボタンにイベントが委任されるようにします。

$('.ap_private_party_form').on('click', '.edit', function(){
    $(this).closest('.ap_sectionblock').find("fieldset").show();
});

jquery の 1.7 以降のバージョンではon()を使用し、古いバージョンではliveを使用します。

継続問題の更新

$('.close-and-show-next').click(function () {
    var $this = $(this);
    $this.closest('fieldset').hide();
    var $block = $this.closest(".ap_sectionblock");
    $block.find('.ap_sectionheader').append('<span><input type="button" class="edit" value="Edit"></span>');
    $block.next(".ap_sectionblock").find("fieldset").show();
    //return false;
});


$('.ap_private_party_form').on('click', '.edit', function () {
    $('.ap_sectionblock').find('fieldset:visible').hide(); // Just hide the fieldSets that are visible on click of edit of any so that only one is shown at a time.
    $(this).closest('.ap_sectionblock').find("fieldset").show(); // show this ones fieldset
    $(this).remove(); // remove the edit button as you don't need it any more on the edit page.
});

デモ

于 2013-06-21T03:28:00.567 に答える
0

編集項目は、javascript バインド後に作成されました。jquery .on メソッドは、最初にロードされたときにページ上にあった親要素にイベントを添付することで、これを解決します。

$('.ap_sectionblock').on('click', '.edit',function(){
    $(this).closest('.ap_sectionblock').find("fieldset").show();
});

jquery はこのイベントを DOM のずっと上にバブルする必要があるため、"on" をドキュメント ルートではなく、最も近い非変更要素にバインドすることをお勧めします。複雑なドキュメントの処理が速くなります。

http://jsfiddle.net/eFf9d/8/

于 2013-06-21T03:32:35.730 に答える