2013-10-28 36 views
0

我想知道事件如何工作以及如何等待第二个事件在原始事件执行之前触发。在触发事件之前等待用户确认

$.fn.customConfirm = function (message){ 
    // Create modal 
    // then ... 
    $(confirmModal).find("modal-footer a").click(function(e2){ 
      e2.preventDefault(); 
      return ($(this).hasClass("dialogConfirm")); // Returns true if option has class dialogConfirm 
    }); 
}; 

$("a[data-confirm]", click(function(e){ 
     if (!$.customConfirm($(this).attr("data-confirm"))) 
      return false; // Only if customConfirm returns false 
     // Continue 
}); 

这工作就像一个魅力。 customConfirm用2个按钮(确认/取消)创建引导模式,并将data-confirm属性值设置为模态体html。

我不知道如何解决的是如何处理事件e基于用户与模态的交互。截至目前它只是显示模式对话框,原始事件似乎什么都不做。

+0

你必须设置一些东西,使确认对话本身知道触发一些行动。你不能用像你一样简单的'if'测试来设置它,因为它全是异步的。 – Pointy

+0

@Pointy所以自定义对话框不能作为JS'confirm()'事件吗? – Daniel

+0

不,你不能通过内建的'confirm()'使浏览器做到这一点。但是,您可以将回调函数传递给您的确认对话框,并让该代码在点击按钮时调用它。 – Pointy

回答

0

我解决了这个问题,只要用户确认并在原始元素上触发第二个click(),就可以通过将属性data-confirmed添加到点击元素中。

$.fn.customConfirm = function (message){ 
     var handle = $(this); 
     // Create modal 
     // then ... 
     $(confirmModal).find("modal-footer a").click(function(e2){ 
      e2.preventDefault(); 
      $(handle).attr("data-confirmed", ($(this).hasClass("dialogConfirm")))[0].click(); 
      return false; 
     }); 
}; 

$("a[data-confirm]").click(function(e){ 
    if ($(this).attr("data-confirmed") !== "true") 
    { 
      e.preventDefault(); 
      $(this).customConfirm(); 
      return false; 
    } 
    $(this).removeAttr("data-confirmed"); 

    // Continue 
}); 
相关问题