表单提交jQuery不起作用

Phi*_*hil 56 jquery jquery-ui

我有那种形式

<form action="deletprofil.php" id="form_id" method="post">
            <div data-role="controlgroup" data-filter="true" data-input="#filterControlgroup-input">
                <button type="submit" name="submit" value="1" class="ui-btn ui-shadow ui-corner-all ui-icon-delete ui-btn-icon-right" data-icon="delete" aria-disabled="false">Anlegen</button>
                <button type="submit" name="submit" value="2" class="ui-btn ui-shadow ui-corner-all ui-icon-delete ui-btn-icon-right" data-icon="delete" aria-disabled="false">Bnlegen</button>
            </div>
        </form> 
Run Code Online (Sandbox Code Playgroud)

那个Popup来自 jQuery Mobile

<div class="ui-popup-container pop in ui-popup-active" id="popupDialog-popup" tabindex="0" style="max-width: 1570px; top: 2239.5px; left: 599px;">
    <div data-role="popup" id="popupDialog" data-overlay-theme="b" data-theme="b" data-dismissible="false" style="max-width:400px;" class="ui-popup ui-body-b ui-overlay-shadow ui-corner-all">
        <div data-role="header" data-theme="a" role="banner" class="ui-header ui-bar-a">
            <h1 class="ui-title" role="heading" aria-level="1">Delete Page?</h1>
        </div>
        <div role="main" class="ui-content">
            <h3 class="ui-title">Sicher dass Sie das Profil löschen wollen?</h3>
            <p>Es kann nicht mehr rückgängig gemacht werden.</p>
            <a href="#" id="NOlink" class="ui-btn ui-corner-all ui-shadow ui-btn-inline ui-btn-b">Abbrechen</a>
            <a href="#" id="OKlink" class="ui-btn ui-corner-all ui-shadow ui-btn-inline ui-btn-b">OK</a>
        </div>
    </div>
  </div>
Run Code Online (Sandbox Code Playgroud)

用我的jQuery代码

<script language="javascript" type="text/javascript">
$(function(){
    $('#form_id').bind('submit', function(evt){
        $form = this;
        evt.preventDefault();
        $("#popupDialog").popup('open');
        $("#NOlink").bind( "click", function() {
            $("#popupDialog").popup('close');
        });
        $("#OKlink").bind( "click", function() {              
            $("#popupDialog").popup('close');   
            $( "#form_id" ).submit();         
        });         
    });
});    
    </script>
Run Code Online (Sandbox Code Playgroud)

弹出窗口显示但表单提交不起作用.有人有什么想法吗?

mpl*_*jan 144

头号错误是有什么关系submitIDNAME 在您的形式.

重命名表单元素,否则无法调用submit表单,因为提交方法/处理程序被名称/ id属性遮蔽.


其他几件事:

如上所述,您需要使用比jQuery更简单的事件来提交表单

但您还需要取消链接上的点击次数

顺便问一下,为什么你有两个按钮?由于您使用jQuery提交表单,除非您在单击时设置隐藏字段,否则您永远不会知道单击了哪两个按钮.

<form action="deletprofil.php" id="form_id" method="post">
  <div data-role="controlgroup" data-filter="true" data-input="#filterControlgroup-input">
  <button type="submit" value="1" class="ui-btn ui-shadow ui-corner-all ui-icon-delete ui-btn-icon-right" data-icon="delete" aria-disabled="false">Anlegen</button>
  <button type="submit" value="2" class="ui-btn ui-shadow ui-corner-all ui-icon-delete ui-btn-icon-right" data-icon="delete" aria-disabled="false">Bnlegen</button>
  </div>
</form> 

 $(function(){
    $("#NOlink, #OKlink").on("click", function(e) {
        e.preventDefault(); // cancel default action
        $("#popupDialog").popup('close');
        if (this.id=="OKlink") { 
          document.getElementById("form_id").submit(); // or $("#form_id")[0].submit();
        }
    });

    $('#form_id').on('submit', function(e){
      e.preventDefault();
      $("#popupDialog").popup('open');
    });
});    
Run Code Online (Sandbox Code Playgroud)

从你的评论来看,我认为你真的想这样做:

<form action="deletprofil.php" id="form_id" method="post">
  <input type="hidden" id="whichdelete" name="whichdelete" value="" />
  <div data-role="controlgroup" data-filter="true" data-input="#filterControlgroup-input">
  <button type="button" value="1" class="delete ui-btn ui-shadow ui-corner-all ui-icon-delete ui-btn-icon-right" data-icon="delete" aria-disabled="false">Anlegen</button>
  <button type="button" value="2" class="delete ui-btn ui-shadow ui-corner-all ui-icon-delete ui-btn-icon-right" data-icon="delete" aria-disabled="false">Bnlegen</button>
  </div>
</form> 

 $(function(){
    $("#NOlink, #OKlink").on("click", function(e) {
        e.preventDefault(); // cancel default action
        $("#popupDialog").popup('close');
        if (this.id=="OKlink") { 
          // trigger the submit event, not the event handler
          document.getElementById("form_id").submit(); // or $("#form_id")[0].submit();
        }
    });
    $(".delete").on("click", function(e) {
        $("#whichdelete").val(this.value);
    });
    $('#form_id').on('submit', function(e){
      e.preventDefault();
      $("#popupDialog").popup('open');
    });
});  
Run Code Online (Sandbox Code Playgroud)

  • "第一个错误是在表单中提供任何ID或NAME"提交"." 精湛的评论,谢谢. (24认同)
  • “ NUMBER错误是您的表单中包含ID或NAME的任何内容都可以“提交”。” -救生员! (3认同)
  • 第一个错误是您的表单中包含任何以 ID 或名称提交的内容。我的情况就是如此,它救了我的命。谢谢~~~ (2认同)

Aru*_*hny 53

因为当你调用$( "#form_id" ).submit();它时会触发外部提交处理程序,它会阻止默认操作,而不是使用

$( "#form_id" )[0].submit();       
Run Code Online (Sandbox Code Playgroud)

要么

$form.submit();//declare `$form as a local variable by using var $form = this;
Run Code Online (Sandbox Code Playgroud)

以编程方式调用dom元素的submit方法时,它不会触发附加到元素的提交处理程序

  • @Phil重命名按钮...不要在表单元素中使用`name ="submit"` (3认同)

Bro*_*yes 7

根据http://api.jquery.com/submit/

当用户尝试提交表单时,submit事件将发送到元素.它只能附加到元素上.可以通过单击显式<input type="submit">, <input type="image"><button type="submit">,或者Enter 在某些表单元素具有焦点时按下来提交表单.

所以基本上,.submit是一个绑定函数,提交表单你可以使用简单的Javascript:

document.formName.submit().
Run Code Online (Sandbox Code Playgroud)


Ben*_*Ben 5

由于每个控件元素都在表单元素上通过其名称进行引用(请参阅表单规范),因此名称为“submit”的控件将覆盖内置提交函数。

这导致了上面评论中提到的错误:

未捕获的类型错误:对象的属性“提交”#<HTMLFormElement>不是函数

正如上面接受的答案一样,最简单的解决方案是更改该控制元素的名称。

dispatchEvent然而,另一种解决方案可能是在表单元素上使用方法:

$("#form_id")[0].dispatchEvent(new Event('submit')); 
Run Code Online (Sandbox Code Playgroud)