jQuery:表单没有提交$(“#id”)。submit(),但是会提交一个'submit'按钮?

时间:2010-07-21 21:06:15

标签: jquery forms form-submit

<form method="post" action="load_statements.php?action=load" id="loadForm"
                            enctype="multipart/form-data">

这是我的表格,对我来说很好看。在那种形式,我把这个按钮:

<input type="button" name="submit" id="submit" value="Submit" onclick="confirmSubmit()" class="smallGreenButton" />

这是它调用的函数:

function confirmSubmit() {
    // get the number of statements that are matched
    $.post(
        "load_statements.php?action=checkForReplace",
        {
            statementType : $("#statementType").val(),
            year : $("#year").val()
        },
        function(data) {
            if(data['alreadyExists']) {
                if( confirm("Statements already exist for " + $("#statementType").html() + " " + $("#year").val() +
                    ". Are you sure you want to load more statements with these settings? (Note: All duplicate files will be replaced)"
                )) {
                    $("#loadForm").submit();
                }
            } else {
                $("#loadForm").submit();
            }
        }, "json"
    );
}

如您所见,它调用$("#loadForm").submit();,但表单未提交(即页面不刷新)。那是为什么?

谢谢!

9 个答案:

答案 0 :(得分:76)

将按钮的“提交”名称更改为其他名称。这导致了问题。 请参阅dennisjq的答案: http://forum.jquery.com/topic/submiting-a-form-programmatically-not-working

  

请参阅jQuery submit()文档:

     

表单及其子元素不应使用输入名称或ID   与表单属性冲突,例如提交,长度或方法。   名称冲突可能导致混乱的故障。有关的完整列表   规则以及检查这些问题的标记,请参阅DOMLint。

答案 1 :(得分:19)

我使用$("form")[0].submit()

这里$("form")返回一个DOM元素数组,因此通过访问相关索引,我们可以获取表单元素的DOM对象,并在该DOM元素中执行submit()函数。

退回是如果你在一个html页面中有几个表单元素,你必须知道“表单”的正确顺序

答案 2 :(得分:17)

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

jQuery submit()事件会在您提交表单时添加一个事件侦听器。因此,您的代码与提交事件基本上没有任何关系。 如果您希望提交该表单,请使用旧式JavaScript document.formName.submit()


我完整地留下原来的答案,指出我离开的地方。我意味着要说的是,如果你有这样的函数,那么为什么要在ajax部分中发布值然后使用jQuery提交表单会让人感到困惑。在这种情况下,我会将事件绑定到单击按钮,然后如果要返回则返回true,否则返回false,如下所示:

$('#submit').click( function() {
  // ajax logic to test for what you want
  if (ajaxtrue) { return confirm(whatever); } else { return true;}
});

如果此函数返回true,则表示单击提交按钮成功,并且会发生正常的浏览器行为。然后,您还以事件处理程序的形式将逻辑与标记分开。

希望这更有意义。

答案 3 :(得分:13)

我遇到了类似的问题,花了一段时间才弄明白。 jQuery的.submit()函数应该触发表单提交,如果你没有将处理程序传递给它,但它之所以不是因为你的提交按钮被命名为&#34;提交&# 34;并且正在覆盖表单的提交功能。

即。 jQuery调用DOM对象的<form>.submit()函数,但是通过调用<form>.<inputname>也可以访问表单中的所有输入。因此,如果您的某个输入被命名为&#39;提交&#39;它用<form>.submit()覆盖<form>.submit函数 - 作为输入DOM元素....如果这有意义吗?因此,当jQuery调用<form>.submit()时,它不起作用,因为提交不再是一个函数。 因此,如果您更改按钮的名称,则应该有效。

不确定为什么控制台没有记录错误,也许jQuery首先检查提交函数是否存在,如果函数不存在则忽略请求。

答案 4 :(得分:4)

我在表单中添加了一个不可见的提交按钮,而不是调用submit()函数,我在提交按钮上调用click()函数=)

按钮: <div style="display:none"><input id="alternateSubmit" type="submit" /></div>

绕过表单提交的疯狂方式: $("#alternateSubmit").click();

答案 5 :(得分:3)

擦除属性&#34; name&#34;在提交按钮中:

这是你的代码:

MultiResourceItemReader

应该是这样的:

<input type="button" name="submit" id="submit" value="Submit" onclick="confirmSubmit()" class="smallGreenButton" />

答案 6 :(得分:0)

尝试一下,为我工作

如果您确实以id或name提交,则需要重命名该表单元素。

如果要在脚本中使用element.submit(),则不能将id =“ submit”赋予表单的任何其他元素。

Form Submit jQuery does not work

答案 7 :(得分:-1)

看起来你在一个只在你的onclick处理程序中的ajax帖子后运行的回调中发生了提交。

换句话说,当您单击“提交”时,浏览器必须先出去并点击checkForReplace操作。

答案 8 :(得分:-3)

它的Ajax调用,为什么你需要在使用ajax处理它时提交表单。您可以使用

离开页面
window.location.href = "/somewhere/else";