【问题标题】:window.alert() preceding jquery dialog popupwindow.alert() 在 jquery 对话框弹出之前
【发布时间】:2012-02-10 10:14:13
【问题描述】:

我正在使用 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>

当用户单击第一个按钮时,我有一个对话框弹出窗口,其中包含 2 个按钮,我需要使用 ajax 发送数据,否则取消......

  $("#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() 弹出虽然这行代码在标准警报调用之前!!!

【问题讨论】:

  • 为什么使用字符串作为 POST 数据?你可以传递一个对象...
  • 我有一个将var 字符串变量传递给data arg 的示例!!!它可以正常工作))但无论如何都需要查看 jquery api docs!!!
  • 应该是这样的? var obj = { var1: "var1Val", var2: "var2Val" };
  • 完全正确(有时 cmets 的 15 个字符的最小长度很糟糕)

标签: javascript jquery jquery-ui jquery-plugins


【解决方案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】:

    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" );
            }
        }
    

    【讨论】:

    • 感谢您的回复!但是当用户更改表格行表单输入元素时我喜欢它!!!$(".table_row").changed()任何想法????我可以做吗?当行被改变模拟按钮点击..????在这种情况下,我认为我的变量将无法访问!!!
    【解决方案3】:

    你可以用这个

    $("#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();
            }
        });
    
    }
    

    【讨论】:

      猜你喜欢
      • 2012-06-07
      • 2012-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-15
      • 1970-01-01
      相关资源
      最近更新 更多