jQuery jqModal确认对话框回调问题

时间:2010-07-09 12:12:34

标签: jquery jqmodal

使用jqModal网站上的代码,有趣!覆盖:
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");
}

问题:每次调用confirm函数时,都会逐步触发回调,所以当我第二次单击时,处理程序会执行2次,第3次,3次,依此类推。

2 个答案:

答案 0 :(得分:0)

这是因为每次调用confirm函数时,都会添加一个新的“click”事件处理程序。

答案 1 :(得分:0)

解决方案是在绑定新的更新回调之前,在确认框中取消绑定click事件。在下面的示例中,请注意绑定新回调之前任何绑定的单击事件的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非常棒。