根据弹出窗口中单击的按钮返回true或false

时间:2012-07-04 18:38:11

标签: javascript callback form-submit

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

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

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

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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);
});

答案 2 :(得分:0)

仅捕获此表单提交的'click事件将无法处理所有情况(例如,如果有人点击输入非文本区输入,表单也会提交)。

如果我想以异步方式处理提交,我曾经在原文被阻止之后手动触发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();
      } );
    }
  });
})();