【问题标题】:How to make a form submit on div click using jquery?如何使用 jquery 在 div 点击时提交表单?
【发布时间】:2014-02-27 07:25:16
【问题描述】:

我已经在单个 php 文件中尝试过,但没有成功,所以我现在尝试在两个单独的 php 文件中,一个用于表单,另一个用于进程。

如何在 div 或链接点击时提交表单?

我尝试过的代码

$(document).ready(function(){
    jQuery('.web').click(function () {
        $("#g_form").submit();
        alert('alert');
    });
});

表格

<form action="p.php" id="g_form" method="POST">
    <input type="text" name="f1" value="">
    <input type="submit" value="submit!" name="submit"/>
</form>

<div class="web">click</div>

这里是进程文件代码p.php

<?php
if(isset($_POST['f1'])){
    echo $_POST['f1'];
} ?>

当我点击提交按钮时,表单正在提交,但是当我点击.web div 时,即使我收到警报消息但没有提交,它也没有提交表单。

我在这里做错了什么?如果我有想法会很有帮助。

【问题讨论】:

    标签: javascript php jquery html forms


    【解决方案1】:

    .submit() docs

    表单及其子元素不应使用与表单属性(例如提交、长度或方法)冲突的输入名称或 ID。 名称冲突可能会导致令人困惑的失败。如需完整列表 规则并检查这些问题的标记,请参阅 DOMLint.

    你给你的提交按钮命名为提交,上面的段落告诉你会导致“令人困惑的失败”

    因此,如果您访问 dom 元素并查看 .submit 属性,您会发现,由于您将按钮命名为 submit 而不是 .submit作为函数,因此它是对按钮 dom 元素的引用

    HTML

    <form action="p.php" id="g_form" method="POST">
        <input type="text" name="f1" value="">
        <input type="submit" value="submit!" name="submit"/>
    </form>
    
    <div class="web">click</div>
    

    JS

    //Get the form element
    var form = $("#g_form")[0];
    console.log(form.submit);
    //prints: <input type="submit" value="submit!" name="submit"/>
    

    当你更改提交名称时

    <form action="p.php" id="g_form" method="POST">
        <input type="text" name="f1" value="">
        <input type="submit" value="submit!" name="psubmit"/>
    </form>
    
    <div class="web">click</div>
    

    JS

    var form = $("#g_form")[0];
    console.log(form.submit);
    //prints: function submit() { [native code] } 
    

    所以只需给您的提交按钮一个不与表单属性冲突的不同名称。

    【讨论】:

    • 谢谢+1。这是 js 中表单的 [0] 数组吗?
    • @rram,因为 jquery 在选择元素时返回一个数组,这只是从 jquery 对象获取底层 dom 对象。这是一条捷径,而不是必须做$("#g_form").get(0);
    • @rram,所有 jQuery 选择器也是数组。即使它是一个元素,它仍然是一个数组。因此,document.getElementById("myId")$("#myId")[0] 具有相同的结果。
    • 抱歉问问题,为什么人们说例如 $('.chart').something 作为 jquery 对象和选择器而不是数组@AlexanderMP
    • @rram,因为它不仅仅是一个数组。例如,您可以 $('...').fadeOut() 。你不能用数组来做到这一点。此功能由 jQuery 提供。这是一个 jQuery 对象。
    【解决方案2】:

    HTML(为表单提供名称,从提交中去除名称):

    <form action="p.php" name="g_form" id="g_form" method="post">
        <input type="text" name="f1" value="">
        <input type="submit" value="submit!"/>
    </form>
    
    <div class="web">click</div>
    

    JavaScript

    //use jQuery instead of $ in the global scope, to avoid conflicts. Pass $ as parameter
    jQuery(document).ready(function($){
        //use on(), as it's the recommended method
        $('.web').on('click', function () {
            //use plain JavaScript. Forms are easily accessed with plain JavaScript.
            document.g_form.submit();
            alert('alert');
        });
    });
    

    【讨论】:

    • 感谢 +1 的新方式document.g_form.submit();
    【解决方案3】:

    从表单中删除提交并重试:

    <form action="http://test.com" id="g_form" method="GET">
        <input type="text" name="f1" value=""/>
    </form>
    
    <div class="web">click</div>
    

    我将操作更改为真实的 URL,将方法更改为 GET,因此可以看到一些变化。

    Fiddle

    【讨论】:

    • 感谢您的帮助。+1
    【解决方案4】:

    更改提交名称并尝试,

    <input type="submit" value="submit!" name="mySubmit"/>
    

    【讨论】:

    • 不确定原因。
    • 感谢您的帮助。+1
    【解决方案5】:
    $(".web").live('click', DivClick);
    
    function DivClick(){
        $("#g_form").submit();
    }
    

    【讨论】:

      【解决方案6】:

      您可以触发提交按钮点击。

      <form action="p.php" id="g_form" method="POST">
      <input type="text" name="f1" value="">
      <input type="submit" value="submit!" id="f_submit" name="submit"/>
      </form>
      
      <div class="web">click</div>
      
      
      
       $(document).ready(function(){
             jQuery('.web').click(function () {
              $("#f_submit").trigger( "click" );
                alert('alert');
          });
        });
      

      演示:http://jsfiddle.net/awladnas/a6NJk/610/

      【讨论】:

      • 谢谢+1。这行得通。如果我知道它不工作的原因会对我有帮助
      • 不确定,猜测是因为输入提交的名称(提交)。使用其他名称并尝试。
      • 是的。它肯定与该输入字段有关,因为要么重命名它(参见@Senthilmurugan 答案)或删除它(参见我的答案)它开始工作。
      • @rram :是的,是按钮名称的问题。
      • 查看我的回答,了解为什么会发生这种情况,当您使用表单属性名称作为元素名称时,它会用该名称覆盖表单的属性
      猜你喜欢
      • 2013-08-26
      • 1970-01-01
      • 1970-01-01
      • 2013-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-26
      • 2013-10-10
      相关资源
      最近更新 更多