6

我有一个显示记录行的 HTML 表,并在末尾有一个带有删除链接的列。每个删除链接都有一个确认删除类。我需要在单击时弹出一个确认对话框,并且由于它在多个页面中使用,因此在外部 JS 文件中创建了一个确认函数。

我已经使用 jQuery [代码底部的代码] 将函数调用添加到链接的单击中,并且在 [用户单击确定] 后确认对话框之前它工作正常。然后不再调用该函数。

我想我错过了一些非常简单的东西,但由于我不经常使用 JS/jQuery,我的知识可能存在差距。为什么在第一个 OK 之前它可以正常工作?它似乎正在存储对结果的引用并重用它,而不是每个链接的唯一引用。

这是在注释页面上使用时的代码:

$(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

用户第一次单击确定后,您是否以某种方式动态重新加载表?如果是这样,则可能是事件未绑定到重新加载的表。尝试使用实时事件处理程序

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

在您的原始代码中,$("a.confirm-delete").click(...)只会将事件绑定到DOM 中已有的a.confirm-delete对象。如果稍后添加新元素,则事件不会绑定到它。通过使用 jQuery 的实时事件处理程序,事件将绑定到当前存在的任何元素或动态创建的任何元素。a.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 回答