1

首先对不起我的英语不好。

我想在提交表单(id="form")之前显示一个确认层(id="confirmwin")。还有另一个按钮 (id="yes") 用于提交表单。

我试过这个:

层:

<div id="confirmwin" style="display:none">
Are you sure to submit?<br>
<a href="#" id="yes">Yes</a> <a href="#" onclick="closeconfirmwin()">No</a>
</div>

JavaScript:

$(document).ready(function(){
  $("#yes").click( function() {
    $("#form").off("submit").submit();
  });
  $("#form").on("submit", function() {
    $('#confirmwin').show();
    return false;
  });
});

有时(并非总是)它看起来像是在无限循环中。

也许#yes click 事件的 off 事件出错了。

4

4 回答 4

1

您是否尝试.submit()在关闭时删除它?

$("#form").off("submit").submit();

不应该吗。。

$("#form").off("submit")  //if

并且只有在确认后才能继续做..

$("#form").submit(); //then you can /off() but I don't see the need to
于 2013-01-23T15:17:15.330 回答
1

像这样简单

<form id="xpto" name="" action="" ... onsubmit="return callJavascriptFunctionConfirm();">

//bla bla bla here

</form>

function callJavascriptFunctionConfirm(){
   //do the logic here
   if (yes) 
      return true; 
   else
      return false;
}

}

于 2013-01-24T15:50:55.083 回答
1

一种解决方案是在触发提交事件时传递额外的参数。您可以在此处阅读有关 jQuery API中事件数据的更多信息。

$("#yes").click( function() {
    $("#form").trigger("submit", [true]);
});

$("#form").on("submit", function(e, blnConfirmed) {
    // If it's not confirmed yet, show the overlay.
    if (!blnConfirmed) {
        $('#confirmwin').show();
        return false;
    } // else it actually IS confirmed, do a real submit
});

您应该首先测试此代码。这只是一个例子。

于 2013-01-23T15:20:57.070 回答
1

这很容易:

只需添加一个全局变量:

var ignoreConfirm = false;

所以它看起来像:

$("#yes").click( function() {
  ignoreConfirm = true;
  $("#form").off("submit").submit();
});

$("#form").on("submit", function() {
  if(!ignoreConfirm){
   $('#confirmwin').show();
   return false;
  }
});
于 2013-01-23T15:21:43.647 回答