0

使用来自 jqModal 网站的代码,部分 FUN!覆盖:
http
://dev.iceburg.net/jquery/jqModal/#examples (我编辑了代码以使用回调函数)

function confirm(msg,callback) {
  $('#confirm')
    .jqmShow()
    .find('p.jqmConfirmMsg')
      .html(msg)
    .end()
    .find(':submit:visible')
      .click(function(){
        if(this.value == 'yes')
          (typeof callback == 'string') ?
            window.location.href = callback :
            callback();
        $('#confirm').jqmHide();
      });
}

$().ready(function() {
  $('#confirm').jqm({overlay: 88, modal: true, trigger: false});

  // trigger a confirm whenever links of class alert are pressed.
  $('a.confirm').click(function() { 
    confirm('About to visit: '+this.href+' !',callbackfunction); 
    return false;
  });
});

function callbackfunction()
{
 console.log("callback triggered");
}

问题:每次调用确认函数时,回调都会增量触发,所以当我第二次点击时,处理程序被执行了 2 次,第 3 次,3 次等等。

4

2 回答 2

0

This happens because each time you call the confirm function, you add a new 'click' event handler.

于 2010-07-09T12:18:06.767 回答
0

解决方案是在绑定新的、更新的回调之前简单地取消绑定确认框中的点击事件。在下面的示例中,请注意 confirm() 函数以及在绑定新回调之前取消绑定任何绑定的单击事件。也许他的示例代码真的应该是:

function confirm(msg,callback) {
  $('#confirm')
    .jqmShow()
    .find('p.jqmConfirmMsg')
      .html(msg)
    .end()
    .find(':submit:visible')
    .unbind('click')
      .click(function(){
        if(this.value == 'yes')
          (typeof callback == 'string') ?
            window.location.href = callback :
            callback();
        $('#confirm').jqmHide();
      });
}

自您的原始帖子以来已经过去了一段时间,但也许这对将来的某人有用。jqModal 真的很棒。

于 2010-11-20T05:21:09.060 回答