window.alert () перед всплывающим диалоговым окном jquery - PullRequest
0 голосов
/ 10 августа 2011

Я использую диалоговый плагин 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, иначе отмена ...

  $("#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-verify") .dialog (), хотя эта строка кода предшествует стандартному вызову оповещения !!!

Ответы [ 3 ]

1 голос
/ 10 августа 2011

изменить код на это:

$("#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" );
            }
        }
        });    
1 голос
/ 10 августа 2011

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" );
        }
    }
0 голосов
/ 10 февраля 2012

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

}
...