6

レコードの行を表示し、最後に削除リンクのある列を持つ HTML テーブルがあります。各削除リンクには、確認削除のクラスがあります。クリック時に確認ダイアログのポップアップを表示する必要があり、複数のページで使用されるため、外部 JS ファイルに確認機能を作成しました。

jQuery [投稿の下部にあるコード] を使用してリンクのクリックに関数呼び出しを追加しましたが、[ユーザーが [OK] をクリックした] ダイアログが確認されるまで正常に動作します。その後、関数は呼び出されなくなります。

私はJS/jQueryをあまり使用していないので、知識にギャップがあるかもしれませんが、かなり単純なものが欠けていると思います。最初の OK まで正常に動作するのはなぜですか? リンクごとに一意のものではなく、結果への参照を保存して再利用しているようです。

Notes ページで使用する場合のコードは次のとおりです。

$(function() {
        // Add Confirmation dialogs for all Deletes
        $("a.confirm-delete").click(function(event) {
            return fConfirmDelete('Note');
        });
});

そして fConfirmDelete 関数

function fConfirmDelete( deleteObj ) {
    return confirm('Are you sure you wish to delete this ' + deleteObj + '?');
} 
4

3 に答える 3

6

ユーザーが最初に[OK]をクリックした後、どういうわけかテーブルを動的にリロードしますか?その場合、イベントが再ロードされたテーブルにバインドされていない可能性があります。代わりにライブイベントハンドラーを試してください。

jQuery 1.7+

$(function() {
        // Add Confirmation dialogs for all Deletes
        $(document).on('click', 'a.confirm-delete', function(event) {
            return fConfirmDelete('Note');
        });
});

jQuery 1.3-1.8:

$(function() {
        // Add Confirmation dialogs for all Deletes
        $("a.confirm-delete").live('click', function(event) {
            return fConfirmDelete('Note');
        });
});

元のコードでは、はすでにDOMにあるオブジェクト$("a.confirm-delete").click(...)にのみイベントをバインドします。後で新しい要素を追加した場合、イベントはそれにバインドされません。jQueryのライブイベントハンドラーを使用することにより、イベントは現在存在する要素または動的に作成される要素にバインドされます。a.confirm-deletea.confirm-deletea.confirm-delete

于 2010-07-20T14:47:03.560 に答える
3

@bradenkeith はおそらく彼の答えで正しいですが、jQuery をもう少し活用し、jQuery ダイアログも実行することをお勧めします。

$("a.confirm-delete").click(function(event) {
      var message = fConfirmDelete(deleteObj);
      var $dialog = $j('<div></div>')
                    .html(message)
                    .dialog({
                     autoOpen: true,
                     bgiframe: true,
                     buttons: {
                       'Dismiss': function() { $j(this).dialog('close');}
                       'Delete': function() { //Do delete things }
                     }
                     modal: true
                     // other parameters here 
                    });

  }); 

私の意見では、そのようなものの方が読みやすく、維持しやすいかもしれません。

ただのオプションです。:)

于 2010-07-20T14:44:16.060 に答える
0
$(function() {
      // Add Confirmation dialogs for all Deletes
      $("a.confirm-delete").click(function(event) {
          if(fConfirmDelete('Note')){
            return true;
          }else{
            return false;
          }
      }); 
});
于 2010-07-20T14:32:51.737 に答える