代码之家  ›  专栏  ›  技术社区  ›  corroded

jquery的表单提交在ie中不起作用

  •  4
  • corroded  · 技术社区  · 16 年前

    我们在这里要做的是,我们有一个id为upgrade_form的表单。我们还有一个叫做“paypal_submit”的表单。这张表格是空白的。Upgrade_Form'具有帐单详细信息字段(地址、名称、到期日等)

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

    • 编辑*

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

    当您单击单选按钮时,我们将表单的操作更改为:

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

    (信用卡URL是隐藏字段)

    所以当我们点击nyromodal lightbox中的链接时,我们只需调用

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

    但是!它仍然不起作用.我们正在安装建议的ie脚本调试器,但我很悲观,我们看不到任何东西。

    编辑

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

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

    在IE中仍然不起作用。那是因为jquery的submit()吗?

    好的,我在google上搜索了jquery submit,发现它在ie中不工作: jQuery form submit() is not working in IE6?

    但是我检查了代码,我们的“提交”按钮实际上是一个链接,我搜索了生成的文档,没有找到名为submit的输入。当单击链接时,我添加了一个警报以检查表单是否存在(因为NoNeNess 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 回复  |  直到 9 年前
        1
  •  14
  •   Tommy W    15 年前

    我最近遇到了一个类似的问题,我在一个asp.net服务器表单中创建了一个“伪表单”(因此我不能使用另一个表单标记),我想将它发布到另一个域,而不需要编写服务器端代码来执行远程发布。简单的回答-创建一个动态表单并提交它。在好的浏览器中工作…

    在经历了一些考验和磨难之后,我意识到除非提交的表单被添加到dom中,否则ie不会像预期的那样工作(真是意外)。所以,这是我的解决办法。我希望这对你们有些人有帮助。请注意,我的所有输入和提交都在同一个容器中。”.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;
    });
    

    最终,它起到了治疗作用。

        2
  •  1
  •   Sam    16 年前

    更改格式化 .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');
      });     
    });
    
        3
  •  0
  •   Golmote Kinoko    16 年前

    会 try...catch 内部声明 each() 揭露错误?

        4
  •  0
  •   Alex KeySmith    16 年前

    如果还没有,可以尝试使用内置的ie javascript调试器(ie8之后内置的,或者ie8之前可下载的)单步执行它?

    很多人使用firebug——因为它太棒了:)但是很多人没有意识到内置调试器在ie 8中隐藏的天赋。

    它与其他脚本调试器具有相同的基本功能,但是 here is a guide for the specific features 如果你以前没有遇到过: