JQuery JavaScript не возвращает истину / ложь должным образом - PullRequest
0 голосов
/ 26 марта 2012

Я написал этот код, чтобы показать подсказку перед отправкой формы. Если значение ввода формы больше 100, отображается диалоговое окно, информирующее пользователя о том, сколько времени потребуется для обработки. Если они нажимают «ОК», он должен вернуть значение «истина» и отправить форму, если они нажимают кнопку «Отмена», он должен вернуть значение «ложь» и не отправлять форму.

Проблема в том, что форма не ждет этого ответа, она все равно отправляется. Я не могу понять, что не так ...

Вот код:

$(document).ready(function() {
  $("form#generate_vouchers").submit(function(){
    if($("input#quantity").val() > 100){
        var warning = "It will take around " + Math.round(($("input#quantity").val() / 23)) + " seconds to generate this batch.<br />Generation will continue even if you leave this page.";
        //Does around 23 codes per second, nearly all of that time is inserts.
        $('<div title="Batch information"></div>').html(warning).dialog({
            draggable: false,
            modal: true,
            minWidth: 350,
            buttons: {
                "Cancel" : function() {
                    $(this).dialog("close");
                    return false;
                },
                "Yes": function() {
                    $("input#submit").hide(300, function(){
                        $("img#loader").show(300);
                    });
                    return true;
                }
            }
        });
    }
    else{
        $("input#submit").hide(300, function(){
            $("img#loader").show(300);
        });
    }
  });
 });

1 Ответ

2 голосов
/ 26 марта 2012

Отображение диалога не останавливает выполнение и ждет, пока оно не закроется. Ваша функция отправки продолжается, а return true и return false ничего не делают.

Вам нужно немедленно прекратить отправку формы (используйте e.PreventDefault ниже), а затем в обратном вызове Yes отправить форму еще раз.

$("form#generate_vouchers").submit(function(e){
if($("input#quantity").val() > 100){
    e.preventDefault(); // stop submit
    var warning = "It will take around " + Math.round(($("input#quantity").val() / 23)) + " seconds to generate this batch.<br />Generation will continue even if you leave this page.";
    //Does around 23 codes per second, nearly all of that time is inserts.
    $('<div title="Batch information"></div>').html(warning).dialog({
        draggable: false,
        modal: true,
        minWidth: 350,
        buttons: {
            "Cancel" : function() {
                $(this).dialog("close");
            },
            "Yes": function() {
                $("form#generate_vouchers")[0].submit(); // submit form manually
                $("input#submit").hide(300, function(){
                    $("img#loader").show(300);
                });
            }
        }
    });
}
else{
    $("input#submit").hide(300, function(){
        $("img#loader").show(300);
    });
}
});

Пример - http://jsfiddle.net/infernalbadger/ajRr7/

...