0

好的,所以使用 jQuery 我已经截获了表单的 .submit() 并且我想创建一个自定义弹出窗口,向他们显示输入的数据并要求他们确认。如果他们单击确认按钮,则 true 返回到 .submit() 并继续,但如果按下 false,则他们不应继续前进并有机会更改其条目。

我已经使弹出窗口正常显示了表单的内容和显示的按钮。我不知道该怎么做是绑定按钮的单击功能,以便如果单击一个按钮,它将返回 false 到 .submit(),如果单击另一个按钮,则返回 true 到 .submit()

如果您需要我发布我的一些代码,请告诉我。

我不想使用确认对话,因为我希望它是一个自定义弹出窗口。

4

3 回答 3

2

您需要使用confirm()对话:

var submit = confirm('Are you sure?');

if (submit) {
    $(this).submit();
}
else {
    return false;
}

这通过向"Are you sure?"用户显示消息的对话框来工作,如果用户单击确认ok按钮,则对话框返回true变量submit,否则返回false

如果false返回(用户单击cancel),则if计算结果为false,并else执行 。

于 2012-07-04T18:40:20.423 回答
0

您需要将 .submit() 作为回调函数传递给对话。这不是单行解决方案,而是您应该熟悉的模式。此http://www.youtube.com/watch?v=hQVTIJBZook可能会对本主题的某些内容以及您可能遇到的其他常见问题有所帮助

例子:

function openPopup(form) {
    //
    // Put whatever code you use to open you
    // popup here
    //

    // Bind click handler to submit form if they click confim
    $("#id_of_confim_button").on("click", function() {
        // Get the form that was
        form.submit();
    });

    // Bind click handler for cancel button
    $("#id_of_cancel_button").on("click", function() {
        //
        // Code to close your popup
        //
    });
};

$("#id_of_form_submit_button").on("click", function(event) {
    // Stops the form from submitting
    event.preventDefault();

    // Get the form you want to submit
    var form = $("#form_being_submit");

    // Call your 'open custom popup' function and pass
    // the form that should be submitted as an argument
    openPopup(form);
});
于 2012-07-04T18:55:48.573 回答
0

仅捕获此表单的提交click事件不会处理所有情况(例如,如果有人在非文本区域输入上按 Enter,则表单也会提交)。

如果我想以异步方式处理提交,我曾经submit在阻止原始文件并进入isDirty状态后手动触发:

(function () {
  var isDirty = true;
  $("form#id").on("submit", function ( evt ) {
    if (isDirty) {
      evt.preventDefault();
      popup( "... params ...", function () {
        // this will called, when the popup ensures the form can be submitted
        // ... & it will be called by the popup
        isDirty = false;
        $("form#id").submit();
      } );
    }
  });
})();
于 2012-07-04T19:32:27.727 回答