Javascript 如何使用JS/jQuery正确提交动态创建的表单?

Javascript 如何使用JS/jQuery正确提交动态创建的表单?,javascript,jquery,forms,cross-browser,submit,Javascript,Jquery,Forms,Cross Browser,Submit,HTML: 搜索 Javascript: <button class="search" name="search">search</button> $('button.search').live('click',函数(事件){ var newForm=jQuery(“”{ '行动':'http://www.google.com/search', “目标”:“顶部” }).append(jQuery(“”{ 'name':'q', “值”:“堆栈溢出”, “类型”:“隐

HTML:

搜索
Javascript:

<button class="search" name="search">search</button>
$('button.search').live('click',函数(事件){
var newForm=jQuery(“”{
'行动':'http://www.google.com/search',
“目标”:“顶部”
}).append(jQuery(“”{
'name':'q',
“值”:“堆栈溢出”,
“类型”:“隐藏”
}));
newForm.submit();
});
小提琴:

预期行为:当点击搜索按钮时,页面应转发至谷歌搜索。在最新的Chrome、Safari和Opera中工作如预期

在最新的FF和IE9中不起作用。无声地单击按钮失败,没有错误消息,也没有发生转发


我在这里遗漏了什么?

我没有任何特定的规范来支持为什么,但我相信如果您将新表单附加到页面上,它会起作用:

$('button.search').live('click', function(event) {
    var newForm = jQuery('<form>', {
        'action': 'http://www.google.com/search',
        'target': '_top'
    }).append(jQuery('<input>', {
        'name': 'q',
        'value': 'stack overflow',
        'type': 'hidden'
    }));
    newForm.submit();
});

(理想情况下,指定一个更靠近按钮的父元素,而不是
文档

我没有任何特定的规范来支持为什么,但我相信如果您将新表单附加到页面上,它会起作用:

$('button.search').live('click', function(event) {
    var newForm = jQuery('<form>', {
        'action': 'http://www.google.com/search',
        'target': '_top'
    }).append(jQuery('<input>', {
        'name': 'q',
        'value': 'stack overflow',
        'type': 'hidden'
    }));
    newForm.submit();
});

(理想情况下,指定一个更靠近按钮的父元素,而不是
document

同样值得一提的是,您必须将表单添加到
body
元素,而不是文档。Chrome是宽容的,当表单刚刚添加到
文档
元素时,Chrome会起作用,但是IE和Firefox需要您将表单添加到
主体
元素。

还值得一提的是,您必须将表单添加到
主体
元素,而不是文档。Chrome是宽容的,当表单刚刚添加到
文档
元素时,Chrome会起作用,但IE和Firefox需要您将其添加到
主体
元素中。

您似乎没有将新表单添加到实际页面中-如果添加
.appendTo(“主体”)会发生什么
提交前?@nnnnnn我确实没有添加表单,这是要求吗?在这种情况下,它在一些浏览器中工作是很奇怪的。对我来说,不添加表单是不对的,但我不知道它是否包含在任何特定的规范中。不过,你应该很容易尝试一下…@nnnnnnnn就是这样,如果你愿意添加答案,我会接受的。对这个要求的一些参考也很好。更简单的可以是:
window.location.href=”http://www.google.com/search?q=stack 溢出”
您似乎没有将新表单添加到实际页面-如果在提交之前添加
.appendTo(“body”)
会发生什么情况?@nnnn我确实没有添加表单,这是一项要求吗?在这种情况下,它在一些浏览器中工作是很奇怪的。对我来说,不添加表单是不对的,但我不知道它是否包含在任何特定的规范中。不过,你应该很容易尝试一下…@nnnnnnnn就是这样,如果你愿意添加答案,我会接受的。对这个要求的一些参考也很好。更简单的可以是:
window.location.href=”http://www.google.com/search?q=stack 溢出”如何传递多个参数?@user3542450-只需在表单中添加更多字段。如何传递多个参数?@user3542450-只需在表单中添加更多字段。
$(document).on('click', 'button.search', function() {    // in jQuery v 1.7+   
// or
$(document).delegate('button.search', 'click', function() {    // in jQuery v 1.4.3+