JQuery .trigger('submit') 出现故障

3

我发现我正在处理的所有表单都有一个包含'name="submit"'属性的提交按钮,因此当我点击应该触发表单提交的链接时,触发提交会中断。

有没有人知道我如何解决这个问题。

下面是我使用的JQuery代码:

$('#login_form :submit').each(
       function()
       {
          var $this = $(this);
          var f = this.form;
          var link = $('<a class="swap_link" href="#">' + $this.val() + '</a>')
             link.click(function()

                {
                   $(f).trigger('submit');
                   return false;
                }
             )
            $this.after(link).css({position:'absolute', top:'-2000px'});
            }
        )

非常感谢您的帮助。 谢谢

嗨,请查看下面的链接:

http://www.mr-scraggy.com/test.html

在此页面上,您可以看到表单正在使用中。 没有在提交按钮中包含name =“submit”的顶部表单有效。 包括name =“submit”的底部表单无效。(当我说有效时,表单未连接到任何脚本,但是您可以看到顶部表单中的提交链接会执行“某些”操作)。

另请参见以下表单HTML:

<form id="swaplink" name="login" action="/action/login.php" method="post" accept-charset="utf-8" class="clearfix">
<input type="hidden" name="redirecturl" id="redirecturl" value="{$redirecturl}" />
<h2>My Account Login</h2>
<ul id="login_form">
    <li>
        <label for="username">Username:</label>
        <input type="text" name="username" id="username" class="input-text" maxlength="32" />
        </li>
    <li>
    <label for="password">Password:</label>
    <input type="password" name="password" id="password" class="input-text" maxlength="32" />
        </li>
    <li>
    <input type="submit" name="submit" value="Login" />
    </li>
</ul>
    {$failed_message}
</form>

你不能将“submit”作为表单控件的名称,参见http://jibbering.com/faq/names/。 - xec
5个回答

6
这是因为您给提交按钮命名为“submit”。由于这已经是表单对象的属性,它会影响提交事件的绑定。
请看jQuery文档中的说明:

表单及其子元素不应使用与表单属性冲突的输入名称或ID,例如submit、length或method。名称冲突可能导致混乱的失败。

将提交按钮的名称更改为其他任何名称(例如“form_submit”),它就可以工作了。

1

嗨,Samiz。我刚在SO上发布了一个关于“submit”关键字的问题,然后看到了这个评论。你能否看一下并给我解释一下呢?谢谢,你可以在我的个人资料中找到这个问题。再次感谢。 - andy
看起来你已经得到了答案!=] - samiz

0
如果您无法更改HTML(例如,因为Zend表单非常聪明...),那么只需在尝试提交之前使用JavaScript更改名称即可轻松完成:
$('#submit').attr('name', 'stupid_javascript');

0

你应该像这样构建链接:

var link = $("<a />").addClass('swapLink')
           .atrr('href', '#')
           .text( $this.val() )
           .onclick( function() {
             $(f).trigger('submit');
             return false;
            });

同时确保将链接插入DOM中,并且f确实是对表单的引用。

你也可以尝试:

$(f).submit();

如果您能发布用于表单的HTML代码,那将会很有帮助。


感谢您对语法的改进。然而,问题仍然存在。除了实际触发器之外,一切都正常工作,除非我从提交表单元素中删除名称属性,在这种情况下,它完美地工作! - Simon Allin
你好。请查看下面的链接:http://www.mr-scraggy.com/test.html在这个页面上,您可以看到表单正在运行。顶部的表单没有一个名为“submit”的提交按钮,它可以工作。包括名称为“submit”的底部表单则不行。 - Simon Allin

0

$('#yourelementhere').trigger('click');

这对我起作用了...不是提交而是点击。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接