2010-07-09 88 views
0

使用jqModal网站的代码部分FUN!覆盖:
http://dev.iceburg.net/jquery/jqModal/#examples
(我编辑的代码,使用一个回调函数)jQuery jqModal确认对话框回调问题

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次等等。

回答

0

发生这种情况是因为每次调用confirm函数时,都会添加一个新的“单击”事件处理函数。

+0

我看到:),但我真的不知道如何改变代码,使其工作就像它应该。我有多个确认对话框,应该调用不同的回调函数 – Sobek 2010-07-09 12:35:04

+0

您只需设置一次,例如在文档准备就绪后,只需更改消息文本并在打电话时显示,例如确认方法。或者,设置一个布尔值来表明你已经添加了处理程序,并且不要再添加它。 – sje397 2010-07-09 12:49:53

+0

是的,的确如此,但是当我在文档就绪级别上定义click处理程序时,将执行的callbackfunction()将不会变化,除非我定义了一个变量,该变量在调用锚点的Click处理程序时发生更改。 – Sobek 2010-07-09 13:01:31

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真的很棒。