jquery的表单提交不在IE中工作

我们在这里要做的是我们有一个id为upgrade_form的表单。 我们还有一个名为“paypal_submit”的表单。 此表格为空白。 ‘upgrade_form’有结算明细字段(地址,姓名,到期等)

然后,我们只有一个提交按钮,逻辑是,如果选中信用卡单选按钮,它将提交表单,但当您选择paypal时,它将显示一个nyromodal( http://nyromodal.nyrodev.com )灯箱单选按钮,然后单击提交。

  • 编辑*

好的,我们彻底改变了整个过程。 我们首先添加了2个未包含在表单中的隐藏字段。 这两个字段包含信用卡和贝宝的url。 当您选择信用卡单选按钮时,您将获得信用卡url。 当您选择paypal单选按钮时,您将获得paypalurl。

当您单击单选按钮时,我们使用以下命令更改表单的操作:

$('#upgrade_form').attr('action', $('#credit-card-target-url').val()) 

(credit-card-url是隐藏字段)

因此,当我们点击nyromodal灯箱中的链接时,我们只需拨打电话

 $('#upgrade_form').submit(); 

但! 它仍然不适用于任何IE浏览器。 对此有何帮助? 我们正在安装建议的IE脚本调试器,但我很悲观,我们什么都看不到。

编辑

刚刚重试了这个。 我们拿出了灯箱和其他代码。 我们刚刚开始使用一个带有链接的基本表单,按下时,调用:

 $('#upgrade_form').submit(); 

仍然无法在IE中工作。 那是因为jquery的submit()吗?

好吧,我用google搜索jquery提交不在IE中工作,发现这个: jQuery表单submit()在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(); }, 

我最近有一个类似的问题,我在ASP.NET服务器表单中创建一个“伪表单”(所以我不能使用另一个表单标签),我想发布到另一个域而不需要写用于执行远程发布的服务器端代码。 简单的答案 – 即时创建表单并提交。 适用于良好的浏览器……

经过一些试验和磨难后,我意识到IE将不会按预期工作(这是一个惊喜),除非正在提交的表单已添加到DOM中。 所以,这是我的解决方案。 我希望它可以帮助你们中的一些人。 请注意,我的所有输入和提交都在同一个容器中。 “.post-to”是带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; }); 

最终,它是一种享受。

改变你格式化.each()方法的方式似乎可以解决问题……

 $('form#paypal-form').submit( function(e) { e.preventDefault(); var parameters = $('form#upgrade_form').serializeArray(); $(parameters).each(function(i,param){ $('').attr('type', 'hidden') .attr('name', param.name) .attr('value', param.value) .appendTo('form#paypal-form'); }); }); 

each()内的try...catch语句会显示错误吗?

如果您还没有,可以尝试使用内置的IE JavaScript调试器(内置IE8,或可下载的IE8之前)单步执行它?

许多人使用firebug – 因为它很棒:)但很多人都没有意识到IE 8中内置调试器的隐藏天赋。

它具有与任何其他脚本调试器相同的基本function,但如果您之前没有遇到过这个function,请参考以下内容: