我们在这里要做的是我们有一个id为upgrade_form的表单。我们还有一个名为“paypal_submit”的表单。此表格为空白。 'upgrade_form'有结算明细字段(地址,姓名,到期等)
然后我们只有一个提交按钮,逻辑是如果选中信用卡单选按钮它会提交表单,但是当你选择paypal收音机时它会显示一个nyromodal(http://nyromodal.nyrodev.com)灯箱按钮,然后单击提交。
好的,我们彻底改变了整个过程。我们首先添加了2个未包含在表单中的隐藏字段。这两个字段包含信用卡和贝宝的网址。当您选择信用卡单选按钮时,您将获得信用卡网址。当您选择paypal单选按钮时,您将获得paypal网址。
当您单击单选按钮时,我们使用以下命令更改表单的操作:
$('#upgrade_form').attr('action', $('#credit-card-target-url').val())
(credit-card-url是隐藏字段)
因此,当我们点击nyromodal灯箱中的链接时,我们只需拨打
$('#upgrade_form').submit();
BUT!它仍然不适用于任何IE浏览器。对此有何帮助?我们正在安装建议的IE脚本调试器,但我很悲观,我们什么都看不到。
编辑
刚刚重试了这个。我们拿出了灯箱和其他代码。我们刚刚开始使用一个带有链接的基本表单,按下后,调用:
$('#upgrade_form').submit();
仍然无法在IE中使用。那是因为jquery的submit()吗?
好的,我用google搜索jquery提交不在IE中工作,发现:jQuery form submit() is not working in IE6?
但是我检查了我们的代码,我们的“提交”按钮实际上是一个链接,我搜索了生成的文档,发现没有名为submit的输入。单击链接时,我添加了一个警报来检查表单是否存在(由于nodeName null问题),我确实收到了带有html格式的警报。它只是暂停提交。
这是现在的代码:
$('#paypalbutton').click( function() {
alert($('form#upgrade_form').html());
$('form#upgrade_form').submit();
return true;
}
IE在jquery中停止了这一行:
nodeName: function( elem, name ) {
return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
},
答案 0 :(得分:14)
我最近有一个类似的问题,我正在创建一个"伪形式"在ASP.NET服务器表单中(因此我无法使用其他表单标记),我想将其发布到另一个域,而无需编写服务器端代码来执行远程发布。轻松回答 - 即时创建表单并提交。适用于良好的浏览器......
经过一些考验和磨难后,我意识到IE不会按预期工作(这是一个惊喜),除非提交的表单已添加到DOM中。所以,这是我的解决方案。我希望它对你们有些帮助。请注意,我的所有输入和提交都在同一个容器中。 " .POST到"是一个带URL的隐藏输入。
$(".post-form").click(function(ev) {
var postto = $(this).siblings(".post-to").val();
var form = document.createElement("form")
$(form).attr("id", "reg-form").attr("name", "reg-form").attr("action", postto).attr("method", "post").attr("enctype", "multipart/form-data");
$(this).siblings("input:text").each(function() {
$(form).append($(this).clone());
});
document.body.appendChild(form);
form.submit();
document.body.removeChild(form);
return false;
});
最终,这是一种享受。
答案 1 :(得分:1)
更改格式化.each()
方法的方式似乎可以解决问题......
$('form#paypal-form').submit( function(e) {
e.preventDefault();
var parameters = $('form#upgrade_form').serializeArray();
$(parameters).each(function(i,param){
$('<input />').attr('type', 'hidden')
.attr('name', param.name)
.attr('value', param.value)
.appendTo('form#paypal-form');
});
});
答案 2 :(得分:0)
try...catch
中的each()
语句是否会显示错误?
答案 3 :(得分:0)
如果您还没有,可以尝试使用内置的IE JavaScript调试器(自IE8内置,或可下载的IE8之前)单步执行它?
很多人使用萤火虫 - 因为它很棒:)但是很多人都没有意识到IE 8中内置调试器的隐藏天赋。
它具有与任何其他脚本调试器相同的基本功能,但here is a guide for the specific features如果您之前没有遇到过它: