当删除所有具有状态的行时,允许window.onbeforeunload

时间:2014-04-08 07:45:14

标签: javascript jquery onbeforeunload

我正在使用MVC4项目。我有一个编辑页面,我允许用户将项目添加到HTML表格。添加项目但未保存项目时,我使用 window.onbeforeunload 在尝试离开页面时警告用户。一切正在考虑的情况下我只删除表中的一个项目,我的 window.onbeforeunload = null; 触发器。我只希望在删除所有项目时触发它。

代码示例:

$("#AddLinkDiv a").on("click", function () {
    $.ajax({
        url: "../../DrugArticles/EditHandledPropertiesRow/" + $("#NplPackId").val(),
        cache: false,
        success: function (data) {
            $("#EditDrugArticleTable tr").last().after(data);
            $("#EditDrugArticleTable tr").last().addClass("ToBeAdded");
                window.onbeforeunload = function() {
                    return 'Are you sure you want to leave?';
                };
            addDatePicker();
        },
        dataType: "html"
    });
    return false;
});

...

if ($("#EditDrugArticleTable .State[Value='New']").find("tr").length == 0) {
    window.onbeforeunload = null;
}

...

    $("#EditDrugArticleTable").on("click", "td.Delete a", deleteRow);

...

    function deleteRow() {
    var parentRow = $(this).parent().parent();
    var state = parentRow.find("input.State").val();
    if (state == "Existing") {

        parentRow.addClass("ToBeDeleted");
        parentRow.find("input").not("[type='hidden']").prop("disabled", true);
        parentRow.find("input.State").val("Deleted");

        $(this).toggleClass("backStage");
        $(this).attr("title", "Ångra");
        window.onbeforeunload = function() {
            return 'Are you sure you want to leave?';
        };
    }
    else if (state == "Deleted") {

        parentRow.removeClass("ToBeDeleted");
        parentRow.find("input").prop("disabled", false);
        if (!parentRow.find("input.Procured").is(":checked")) {
            parentRow.find("input.Price").prop("disabled", true);
        }
        parentRow.find("input.State").val("Existing");

        $(this).toggleClass("backStage");
        $(this).attr("title", "Ta bort");
        if ($("#EditDrugArticleTable").prop(".State[Value='New']")) {
            window.onbeforeunload = null;
        }
    }
    else if (state == "New") {
        parentRow.remove();
        if ($("#EditDrugArticleTable").prop(".State[Value='New']")) {
            window.onbeforeunload = null;
        }
    }
    return false;
}

提前致谢。

1 个答案:

答案 0 :(得分:0)

试试这个: $(窗口).unbind(" beforeunload&#34); - 当你需要取消事件时

$(window).bind(" beforeunload",function(){...}); - 或者,当你需要把它拿回来时

小心使用此事件。 Opera没有处理onbeforeunload,或者我不知道这样做很热。


在最后一次评论后,我认为它必须如下:

function ckeckUnloadEvent() { if ($("#EditDrugArticleTable .State[Value='New']").find("tr").length == 0) { window.onbeforeunload = null; } else { window.onbeforeunload = function() { return 'Are you sure you want to leave?'; }; } }

你的职能:

var parentRow = $(this).parent().parent();
var state = parentRow.find("input.State").val();

if (state == "Existing") {
    ...
}
else if (state == "Deleted") {
    ...
}
else if (state == "New") {
    ...
}

ckeckUnloadEvent();

return false;