window.alert()在jquery对话框弹出之前

时间:2011-08-10 06:28:57

标签: javascript jquery jquery-ui jquery-plugins

我正在使用jQuery对话框插件,因为我需要在用户点击时做出决定

这是我的代码

  <script type='text/javascript'>


  $(function() {
    //destroying dialog


    $('#rdy').tipsy();
    $('#flt').tipsy();
    $('#num').tipsy();
    $('#tpe').tipsy();
    $('#reg').tipsy();
    $('#etd').tipsy();
    $('#dla').tipsy();
    $('#dp').tipsy();
    $('#rem').tipsy();
    $('#to').tipsy();   
    $('#eta').tipsy();
    $('#arr').tipsy();
 });
    $(function(){
        var fDep=document.forms.fDep;
        var flt=fDep.elements['flt[]'];
        var num=fDep.elements['num[]'];     
        var reg=fDep.elements['reg[]'];
        var etd=fDep.elements['etd[]'];
        var dla=fDep.elements['dla[]'];     
        var dep=fDep.elements['dep[]'];     
        var eta=fDep.elements['eta[]'];     
        var arr=fDep.elements['arr[]'];
        for (var i=0;i<flt.length;i++){
            //var aCtrl=ctrls[i];
            //window.alert(etd[i].value);
            $(flt[i]).mask("aa?a");
        }
        for (var i=0;i<num.length;i++){
            //var aCtrl=ctrls[i];
            //window.alert(etd[i].value);
            $(num[i]).mask("99?999");
        }
        for (var i=0;i<etd.length;i++){
            //var aCtrl=ctrls[i];
            //window.alert(etd[i].value);
            $(etd[i]).mask("99:99");
        }
        for (var i=0;i<dla.length;i++){
            $(dla[i]).mask("99:99");
        }
        for (var i=0;i<dep.length;i++){
            $(dep[i]).mask("99:99");
        }
        for (var i=0;i<eta.length;i++){
            $(eta[i]).mask("99:99");
        }
        for (var i=0;i<arr.length;i++){
            $(arr[i]).mask("99:99");
        }

        for (var i=0;i<reg.length;i++){
            $(reg[i]).mask("99?9999");
            //$(reg[i]).css("color","#ff00ff");
        }

    });

    $(".edit_tr").change(function(){

        //window.alert($(this).attr('id')); 
        var rowID=$(this).attr('id');
        //window.alert($("#dep" + rowID).val());

        var sendReq;

        var flt=$("#flt"+rowID).val();
        var num=$("#num"+rowID).val();
        var tpe=$("#tpe"+rowID +" option:selected").val();
        var reg=$("#reg"+rowID).val();
        var etd=$("#etd"+rowID).val();
        var dla=$("#dla"+rowID).val();
        var dep=$("#dep"+rowID).val();
        var rem=$("#rem"+rowID).val();
        var city=$("#city"+rowID +" option:selected").val();
        var eta=$("#eta"+rowID).val();
        var arr=$("#arr"+rowID).val();
        //window.alert();
        var dataStr="flt="+flt+"&"
                    +"num="+num+"&"
                    +"tpe="+tpe+"&"
                    +"reg="+reg+"&"
                    +"etd="+etd+"&"
                    +"dla="+dla+"&"
                    +"dep="+dep+"&"
                    +"rem="+rem+"&"
                    +"city="+city+"&"
                    +"eta="+eta+"&"
                    +"arr="+arr;
        //window.alert(dataStr);

        $("#dialog-confirm" ).dialog({
        resizable: false,
        height:140,
        modal: true,
        buttons: {
            "Сохранить": function() {

                $("#ico"+rowID).html("<img src='images/indic.gif' />");
                $( this ).dialog( "close" );
                sendReq=true;
            },
            "Отмена": function() {
                $("#ico"+rowID).html("");
                $( this ).dialog( "close" );
            }
        }
        });     


        if (sendReq==true){
            $.ajax({
                type: "POST",
                url: "updFlt.php",
                data: dataStr,
                cashe: false,
                success: function(html){
                    $("#ico"+rowID).html("");
                    window.alert("It's ok");
                }
            });
        }else
        {
            window.alert("false");  
        }

        });





</script>

当用户点击我需要使用ajax发送数据的第一个按钮时,我有对话框弹出窗口有2个按钮取消...

  $("#dialog-confirm" ).dialog({
        resizable: false,
        height:140,
        modal: true,
        buttons: {
            "Сохранить": function() {

                $("#ico"+rowID).html("<img src='images/indic.gif' />");
                $( this ).dialog( "close" );
                sendReq=true;
            },
            "Отмена": function() {
                $("#ico"+rowID).html("");
                $( this ).dialog( "close" );
            }
        }
        });

之后我会检查并使用ajax发送到服务器

    if (sendReq==true){
        $.ajax({
            type: "POST",
            url: "updFlt.php",
            data: dataStr,
            cashe: false,
            success: function(html){
                $("#ico"+rowID).html("");
                window.alert("It's ok");
            }
        });
    }else
    {
        window.alert("false");  
    }

    });

我得到的结果是window.alert("false"); - 这行代码在jQuery对话框弹出之前执行!!为什么会这样?当我运行我的网络应用程序并更改表格行标准警报首先弹出(模态表格)然后我到达confirm-dialog $(“#dialog-confirm”)。dialog()弹出,虽然这行代码在标准警报呼叫之前!!!

3 个答案:

答案 0 :(得分:1)

正在读取sendReq并以异步方式写入。这意味着代码立即转到if( sendReq == true ),并在警报发生后分配值。容易解决?将$ .ajax移动到按钮处理程序中:

buttons: {
        "Сохранить": function() {

            $("#ico"+rowID).html("<img src='images/indic.gif' />");
            $( this ).dialog( "close" );
             $.ajax({
               type: "POST",
               url: "updFlt.php",
               data: dataStr,
               cashe: false,
               success: function(html){
                   $("#ico"+rowID).html("");
                   window.alert("It's ok");
               }
           });
        },
        "Отмена": function() {
            $("#ico"+rowID).html("");
            $( this ).dialog( "close" );
        }
    }

答案 1 :(得分:1)

将代码更改为:

$("#dialog-confirm" ).dialog({
        resizable: false,
        height:140,
        modal: true,
        buttons: {
            "Сохранить": function() {

                $("#ico"+rowID).html("<img src='images/indic.gif' />");
                $( this ).dialog( "close" );
                $.ajax({
                type: "POST",
                url: "updFlt.php",
                data: dataStr,
                cashe: false,
                success: function(html){
                    $("#ico"+rowID).html("");
                    window.alert("It's ok");
                }
            });
            },
            "Отмена": function() {
                $("#ico"+rowID).html("");
                $( this ).dialog( "close" );
            }
        }
        });    

答案 2 :(得分:0)

mybe你可以用这个

$("#dialog-confirm" ).dialog({
    resizable: false,
    height:140,
    modal: true,
    buttons: {
        "Сохранить": function() {

            $("#ico"+rowID).html("<img src='images/indic.gif' />");
            var dlg = this;
            call_ajax(function(){
                $("#ico"+rowID).html("");
                window.alert("It's ok");
                $(dlg).dialog( "close" );
            });
        },
        "Отмена": function() {
            $("#ico"+rowID).html("");
            $( this ).dialog( "close" );
        }
    }
    });

AJAX

function call_ajax(call_back){
    $.ajax({
        type: "POST",
        url: "updFlt.php",
        data: dataStr,
        cashe: false,
        success: function(html){
            call_back();
        }
    });

}