【问题标题】:Send form after clicking on link点击链接后发送表格
【发布时间】:2015-03-15 06:40:42
【问题描述】:

我有一个 HTML 表单,我想使用链接提交它。表格必须发送到链接的href。这是我的想法:

为链接tag设置一个点击事件,它执行以下操作:

  • 阻止跟随链接的默认操作。
  • 通过将操作设置为链接的 href 来编辑表单。
  • 使用 jquery submit() 函数提交表单。

我正在寻找一种解决方案,我不必更改我的 html,只需更改 javascript。

我试过这个,但它不起作用。这是我的代码:

Javascript:

jQuery('.row_header').find('td').each(function(){
    var cell = jQuery(this);
    cell.find('a').each(function(){
        //Get last link in cell. There is only one
        linkObject = jQuery(this);
    });     

    //Gets form
    var form = jQuery('#searchForm');

    if(typeof linkObject !== 'undefined'){
        //Get location url for form
        var url = linkObject.attr('href');

        linkObject.click(function(e){
            //Prevent default (following link)
            e.preventDefault(); 
            //Set location from link as form action     
            form.attr('action',url);
            //Submits form
            form.submit();

        });
    }
});

HTML:

<form id="searchForm">
    <input type="text" name="myInput" value="myValue">
    <input type="submit" name="mySubmit" value="mySubmitValue">
</form>

<table>
    <tr class="row_header"><td><a href="myLocation.php">The Link </a></td></tr>
</table>

【问题讨论】:

    标签: javascript jquery html forms


    【解决方案1】:

    如果您想在点击时将action 您的表单设置为href 您的链接,请尝试以下操作:

     $( "#myLink" ).click(function() {
       var form =  $( "#searchForm" ); 
       form.action=$(this).attr('href');
       console.log(form.action);
       form.submit();
     });
    

    这是working Fiddle

    【讨论】:

    • 谢谢。控制台记录了正确的 url,因此设置了操作。但是,表单仍然没有提交。
    • 没有,但问题出在 url 我将 href 更改为 w3schools.com 并正确提交请参阅 the fiddle here 并在本地使用您的 url 尝试它会正常工作。跨度>
    • 我没有收到错误。但它只是跟随链接,没有发送任何postdata。
    • 您只需在表单中添加method="POST"
    • 我已经做过了,只是忘记了例子。没关系。我将 form="post" 添加到您的小提琴中,并将位置更改为我在站点上只有 var_dump($_POST) 的本地地址,并打印一个空数组。它不发送发布数据。
    【解决方案2】:

    你看到你的链接对象是在哪里定义的。 linkObject( ) 里面。

    你定义了这个变量吗?

    您使用了a 元素,它会将您带到链接。所以你必须使用以data-开头的属性,你可以让它看起来像data-href1=' your link',并将属性href设置为#

    您的a 元素应如下所示:

    <a href='#' data-href1 ='your link'> click </a>    
    

    【讨论】:

    • 您不应该使用“#”,因为它们可能会强制网页转到顶部。 "href='javascript:void(0)'" 更安全。
    • 确实应该有一个 var linkObject;在第 2 行上方,但我添加了它,但它不起作用。而且我想避免更改我的 html。
    • 留空不是好习惯。如果它是空白的,那为什么要放呢?
    • 我正在寻找不涉及更改 html 的解决方案
    【解决方案3】:

    一种选择是将表单提交按钮设置为像链接一样的样式。你可以在这里看到:

    How to make button look like a link?

    或者让链接使用 javascript 提交表单。喜欢这里:

    Use a normal link to submit a form

    两者都会满足您的需求。

    【讨论】:

    • 我想使用普通链接,但要重新设置按钮的样式。第二个是我在这里尝试做的,添加一个提交()。但是,我无法让它工作
    【解决方案4】:

    JQuery 提交函数将处理程序绑定到提交事件。

    您可以使用 AJAX,例如发送数据

    【讨论】:

    • 我不想使用 ajax,我希望页面刷新并提交表单,就像按下按钮一样。
    【解决方案5】:

    我找到了解决办法。我仍然不知道为什么,但由于某种原因 .submit() 没有调用提交函数。我的解决方法是找到提交按钮并触发点击:

    form.find('#submitId').trigger('click'); 
    

    代替

    form.submit()
    

    还有

     <input type="submit" name="mySubmit" id="submitId" value="mySubmitValue">
    

    代替

     <input type="submit" name="mySubmit" value="mySubmitValue">
    

    虽然没有必要编辑 html,但是您必须编辑 find() 函数才能找到提交的名称或类型。在寻找结果时,我还稍微更改了代码。这是最终的 JS:

    jQuery(function(){
        jQuery('.row_header').find('td').each(function(){
    
            var linkObject = jQuery(this).find('a');
    
            if(typeof linkObject !== 'undefined'){
    
                linkObject.click(function(e){
                    //Prevent following the link
                    e.preventDefault();
                    //Get url
                    var url = jQuery(this).attr('href');     
                    //Get form              
                    var form = jQuery('#searchForm');
                    //Change form action
                    form.action = jQuery(this).attr('href');
                    //Click submit button
                    form.find('#submitId').trigger('click');
                });
            }
        });
    });
    

    【讨论】:

      猜你喜欢
      • 2020-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-20
      • 2011-09-23
      • 1970-01-01
      • 1970-01-01
      • 2016-10-12
      相关资源
      最近更新 更多