jQuery beforeunload取消,提交为firefox

时间:2012-01-27 20:34:25

标签: jquery jquery-plugins onbeforeunload

我和这一个人有一段时间了。我试图提醒某人,如果他们试图离开页面并已经上传了文件。棘手的部分是,如果他们提交,我希望它不要警告他们。这是一个奇怪的部分,我将在chrome中使用的代码,但所有其他浏览器都不喜欢它。它是插件的一部分,所以只需忽略一些代码。

  function cleanFiles(obj){
   var $obj = $(obj),
   $jForm = $obj.parents("form");
   $jForm.find("input[type=button]:last").not($obj).bind("click.save", function(event){
    $(window).unbind('beforeunload.cleanFile unload.removeFiles');
   });
   $(window).bind('beforeunload.cleanFile', function(event){
    var localSettings = $.extend({}, settings),
    filesList = "";
    $("input[type=hidden].fileFieldLists").each(function(){
     var $obj = $(this);
     filesList += ($obj.val() || "");
    });
    if(filesList.length){
     return localSettings.defaultLeaveMessage;
    }
    $(window).bind('unload.removeFiles', function(event){
     var filesList = [];
     $("input[type=hidden].fileFieldLists").each(function(){
      var $obj = $(this),
       localSettings = $.extend({}, settings, $obj.next().data()),
       fieldValues = ($obj.val().indexOf("*") ? $obj.val().split("*") : $obj.val()),
       fieldValuesCnt = fieldValues.length;
       for(var i = 0; i < fieldValuesCnt; i++){
        filesList.push(localSettings.filepath + fieldValues[i]);
       }
     });
     if(filesList.length){
      deleteFiles(filesList.join(","), false);
     }
    });
   });
  }

1 个答案:

答案 0 :(得分:0)

所以我发现了它。显然在IE和Firefox中,“click”事件在“beforeUnload”事件之后被触发。然而,“mouseup”事件在它们之前触发,因此这是我的解决方案。我把它绑定到“click”和“mouseup”就像这样

$jForm.find("input[type=button]:last").not($obj).bind("click.save mouseup.save", function(event){

它现在适用于所有浏览器......我会为浏览器做些什么来保持一致。感谢所有回复。