需要暂停javascript的确认窗口

时间:2011-06-27 22:55:37

标签: javascript jquery asp.net ajax

在我需要暂停确认框的情况下,我已经被打破了。这就是我所做的:

function onBeforeClientInsert(record) {
    var eventtype = parseInt(record. < %= CEO.FieldEvaluator.GetEvaluatorByDId("EVENT_TYPE_ID").GetFieldDataFieldId() % > );
    var begindate = record. < %= CEO.FieldEvaluator.GetEvaluatorByDId("BeginDate").GetFieldDataFieldId() % > ;
    var enddate = record. < %= CEO.FieldEvaluator.GetEvaluatorByDId("EndDate").GetFieldDataFieldId() % > ;

    $.ajax({
        type: "POST",
        url: "Data.aspx/CheckInsertRecord",
        data: "{EventType:'" + eventtype + "',BeginDate:'" + begindate + "'," + "EndDate:'" + enddate + "' }",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(msg) {

            if (msg.d == "No duplicate") {

            } else {
                alert(msg.d);
                eval("var data = " + msg.d + ";");

            }
            var i = 0;
            alert(i);
            alert(data[i]);
            do {
                $("#beginDate").html(data[i].BeginDate);
                $("#eventTypeID").html(data[i].EVENT_TYPE_ID);
                $("#endDate").html(data[i].EndDate);
                $("#beginlatlong").html(data[i].BeginLATLONG);
                $("#endlatlong").html(data[i].EndLATLONG);

                var modal = document.getElementById('Div1');
                modal.style.display = '';
                modal.style.position = 'fixed';
                modal.style.zIndex = '100';
                modal.style.left = '30%';
                modal.style.top = '10%';


                var screen = document.getElementById('modalScreen');
                screen.style.display = '';
                i++;
                if (confirm("Are you sure you want to continue?") == false) {
                    hide();
                    continue;
                }


            }

            while (msg.d != null);
        }
    });


    if (confirm("Are you sure you want to insert this new record ?") == false) {
        hide();
        return false;
    }
    if (Page_ClientValidate("<%= CEO.GridUtils.Global_ValidationGroupName%>")) {
        hide();
        SetPostBackCause('INSERT');
        return true;
    }
    return false;
}

所以,问题在于

if (confirm("Are you sure you want to insert this new record ?") == false) {
    hide();
    return false;
}

将在确认框

后立即运行
if(confirm("Are you sure you want to continue?")==false){
    hide();
    continue;
}

但我想让它停止,直到用户点击第一个确认框上的内容。你可以告诉我怎么做吗?如果我以错误的方式接近它,你能告诉我任何其他方法吗?

3 个答案:

答案 0 :(得分:2)

Ajax是异步的。

您需要将所有相关代码移至success回调中。

success: function (msg) {
    // snip ...

    if (confirm("Are you sure you want to insert this new record ?") == false) {
        hide();
    }
    if (Page_ClientValidate("<%= CEO.GridUtils.Global_ValidationGroupName%>")) {
        hide();
        SetPostBackCause('INSERT');
    }
}

可以使用async: false使请求同步,但我推荐这个。

答案 1 :(得分:1)

你需要放置所有这些:

if (confirm("Are you sure you want to insert this new record ?") == false) {
        hide();
        return false;
    }
    if (Page_ClientValidate("<%= CEO.GridUtils.Global_ValidationGroupName%>")) {
        hide();
        SetPostBackCause('INSERT');
        return true;
    }
如果要在第一个对话框之后运行,请在AJAX回调中

。目前,您设置回调,然后调用上面的代码。如果您的互联网连接非常慢,那么您看到的第一个对话框理论上可能会在您看到的第二个对话框之后出现。

答案 2 :(得分:0)

您是否考虑过$ .ajax的async:false选项?