jquery表单提交不在IE中工作

时间:2010-09-22 14:36:04

标签: javascript jquery internet-explorer

我们在这里要做的是我们有一个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();
},

4 个答案:

答案 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如果您之前没有遇到过它: