Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jquery在确认之前提交表单_Javascript_Jquery - Fatal编程技术网

Javascript jquery在确认之前提交表单

Javascript jquery在确认之前提交表单,javascript,jquery,Javascript,Jquery,我使用的是一个JQuery对话框插件,除了表单在用户点击任何按钮确认与否之前提交外,该插件工作正常。我已经添加了preventDefault,但是根据我放置的位置,它要么完全停止表单提交,要么完全被忽略,表单只是在未经确认的情况下提交 <script type="text/javascript"> $(document).ready(function() { $('#perm_del_submit').click(function(ev){ $.msgbo

我使用的是一个
JQuery
对话框插件,除了表单在用户点击任何按钮确认与否之前提交外,该插件工作正常。我已经添加了
preventDefault
,但是根据我放置的位置,它要么完全停止表单提交,要么完全被忽略,表单只是在未经确认的情况下提交

<script type="text/javascript">
  $(document).ready(function() {  
    $('#perm_del_submit').click(function(ev){
      $.msgbox("Are you sure?", {  
        type: "confirm", 
        buttons: [
          {type: "submit", value: "Yes"},
          {type: "cancel", value: "No"}
        ]
      }, function(result) {
        if (result == 'Yes') {
          $('#audit_sort_form').submit();
        }
      });
    ev.preventDefault();   
    });
  });
</script>

$(文档).ready(函数(){
$('perm#u del_submit')。单击(函数(ev){
$.msgbox(“你确定吗?”,{
键入:“确认”,
按钮:[
{类型:“提交”,值:“是”},
{类型:“取消”,值:“否”}
]
},函数(结果){
如果(结果=‘是’){
$(“#审核(排序)表格”).submit();
}
});
ev.preventDefault();
});
});

创建确认窗口后,将触发回调函数。这就是为什么在他们回答确认之前就调用submit。根据代码,当它显示confirm时,它认为它的处理已经完成,接下来在que中是回调函数。如果我没有弄错的话,您必须将提交功能应用于“单击”事件

不要将处理程序绑定到“单击”事件,而是绑定到表单提交事件(如果我在表单中,我在“提交”按钮上单击“输入”选项卡,则我已提交表单,但完全绕过了处理程序函数。这也不少见)

如果您想按照您建议的方式执行,还必须在消息框显示后为表单指定一个标志(我在下面的示例中使用了“submittable”)

$('#audit_sort_form').on('submit',function(e) {
   var el = $(this),submittable = el.data('submittable');

   if(!submittable) {
    e.preventDefault();


      $.msgbox("Are you sure?", {  
        type: "confirm", 
        buttons: [
          {type: "submit", value: "Yes"},
          {type: "cancel", value: "No"}
        ]
      }, function(result) {
        if (result == 'Yes') {
         el.data('submittable',true);
         el.submit();
        }
      });
   }


});

我猜您实际的提交按钮(#perm_del_submit)是一个

将其设置为

对于验证表单或确认表单提交,我建议处理表单的
提交
事件,而不是按钮的
单击
事件。提交表单的方法不止一种,因此,除非您只关心通过单击特定按钮提交表单的时间,否则请处理表单提交事件

另一个好习惯是先调用
e.preventDefault()
。这样,如果函数中存在JavaScript错误或
return
语句,表单提交仍然会被取消

$("#audit_sort_form").submit(function(e) {
    e.preventDefault();
    var form = this;
    $.msgbox("Are you sure?", {  
        type: "confirm", 
        buttons: [
            {type: "submit", value: "Yes"},
            {type: "cancel", value: "No"}
        ]
    }, function(result) {
        if (result == "Yes") {
            form.submit();
        }
    });
});
通过调用
元素的
submit()
方法提交表单时,不会调用提交事件。此外,该按钮不包括在表单post中。因此,如果服务器端处理程序取决于包含的submit按钮的值,则必须使用隐藏的输入对其进行欺骗。如果同一表单有多个按钮,并且与服务器单击哪个按钮有关,请在表单中放置一个隐藏字段:

<input type="hidden" name="perm_del_submit" />
<input type="submit" value="a" />
<input type="submit" value="b" />

然后,让上面的
submit
处理程序处理表单提交。隐藏的输入值将已设置,并将指示触发表单提交的按钮。

id为perm\u del\u submit的表单控件的类型是什么对不起,我不理解这个问题?什么是
$(“#perm\u del\u submit”)
这更有意义吗?这是提交按钮的id,因为您没有使用提交按钮提交。如果要使用
.submit
进行post,请不要查找该post参数。应该如下所示:按钮:[{text:“OK”,单击:function(){//要测试提交的回调函数}}您可以在不使用标志(仅供参考)的情况下执行此操作。请删除if语句和标志,并在要提交表单时使用
el[0]。submit()
,它将绕过您用jquery定义的提交回调。虽然您是正确的,但我认为绑定提交处理程序,并且不希望在提交表单的所有条件下执行提交处理程序(甚至是以编程方式)会让开发人员感到困惑。如果在提交表单的某处添加了另一个按钮programmatica呢突然,这个处理者“没有工作”?表单仍然没有submitRight,但是添加标志并不能改变这一事实,即使使用标志,您仍然可以使用“其他”按钮完全绕过该事件处理程序。@Adam这是一个不同的观点,仅仅因为jquery可用并不意味着您应该一直使用它。您好,谢谢,但同样的事情发生了,确认框显示,当单击“是”但实际表单未提交时,页面将刷新
$("input[type=submit]").click(function(){
    this.form.perm_del_submit.value = this.value;
});