2010-12-03 7 views
0

Мы используем форму JQuery plugin для SUMIT наших форм:Плагин формы JQuery - запрос подтверждения пользователя перед отправкой формы?

var options = { 
      dataType: 'json', 
      beforeSubmit: createposPreSubmit, 
      success:  createposPostSubmit, 
      error: function(xhr) { handleError(xhr, 'Error in Create Pos grid form submission'); } 
    }; 

    $('#form-createpos').ajaxForm(options); 

Мы хотим Dispaly запроса с подтверждением продолжить/отменить с помощью метода dialog Jquery UI, до формы представляемых.

Проблема dialog is async, поэтому мы не можем дождаться ответа пользователя. Thuse мы возвращаемся false от beforeSubmit. Но я не могу понять, как вызвать форму представить, если пользователь выбирает для продолжения:

Эти кнопки в нашем модальный диалог:

function createposPreSubmit(formData, jqForm, options) { 

... 

var buttons = { 
    "Continue": function() { 
     $(this).dialog("close"); 
     //HOW CAN WE SUBMIT FORM?? 
     disableSubmit($("#submit-createpos")); 
    }, 
    "Cancel": function() { 
     $(this).dialog("close"); 
    } 
}; 

//Show dialog 

//Always return false 
return false; 
} 

В Продолжить функцию jqForm.submit кнопку и jqForm[0] Дон» t работает нормально. jqForm[0], похоже, отправляет форму, но браузер действует «причудливо».

??

+0

Какой браузер вы используете? Если это IE, ожидаются причудливые действия;) Вы говорите, что функция jQuery `$ ('element'). Submit();` не работает? Я должен был бы увидеть, что остальная часть кода (например, функция `disableSubmit()`) ... – Blender 2010-12-03 15:17:42

ответ

0

Я закончил с использованием этого подхода:

$('#form-createpos').submit(function() { 
    var options = { 
     success: myfunc //WE DON'T NEED A PRESUBMIT HANDLER 
    }; 

    var buttons = { 
     "Continue": function() { 
      $(this).dialog("close"); 
      theForm.ajaxSubmit(options); //MANUALLY SUBMIT FORM 
     }, 
     "Cancel": function() { 
      $(this).dialog("close"); 
     } 
    }; 

    //Show JQuery dialog 
}); 
1

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

Я бы порекомендовал вам использовать глобальную переменную изначально null и обозначить ее как истину после отправки. Когда вы получаете обратный вызов из «pre-submit», проверьте состояние глобальной переменной. Если это правда, приступайте к представлению. Если это ложь, ничего не делайте. Если это значение равно null, значит, обратный вызов закончен ПЕРЕД тем, как они закрыли диалог, то есть вам понадобится вторая глобальная переменная изначально null, которую вы можете установить в true в таком случае, чтобы, если вы обнаружили, что это правда в вашем «Продолжить» «действие кнопки, вы знаете, чтобы действовать немедленно, а не ждать.

Я бы ожидать, что ваш код выглядеть примерно так:

var ajaxPreSubmitOk = null; 
var dialogSubmitOk = null; 
var buttons = { 
    "Continue": function() { 
     $(this).dialog("close"); 
     dialogSubmitOk = true; 
     if(ajaxPreSubmitOk !== null && ajaxPreSubmitOk) { 
      // Presubmit returned and everything is ok.. proceed! 
      callSubmit(); 
     } else if (ajaxPreSubmitOk === null) { 
      // Gotta wait still 
      disableSubmit($("#submit-createpos")); 
     } 
    }, 
    "Cancel": function() { 
     // Regardless of presubmit outcome, do nothing 
     dialogSubmitOk = false; 
     $(this).dialog("close"); 
    } 
}; 

function ajaxFormCallback() { 
    // If callback success 
    if(true) { 
     ajaxPreSubmitOk = true; 
     if(dialogSubmitOk !== null && dialogSubmitOk) { 
      // User already clicked continue. We're good! 
      callSubmit(); 
     } 
    // else callback fail 
    } else { 
     // Regardless of outcome, do nothing 
     ajaxPreSubmitOk = false; 
    } 
} 

function callSubmit() { 
    enableSubmit($("#submit-createpos")); 
    ajaxPreSubmitOk = null; 
    dialogSubmitOk = null; 

    // What do do when everything goes as planned 
} 
Смежные вопросы