在IE8中从一个按钮(多个)中提交新窗口中的表单

时间:2016-01-25 10:26:19

标签: javascript jquery html forms internet-explorer-8

我有一个具有“预览”提交输入的表单,该表单提交与其他表单相同的表单,但是带有“可视化”参数,该参数必须打开一个新窗口(为了使表单保持其临时状态)。如果我正在设计闪亮的HTML5浏览器,我可以使用新的formTarget属性很好地完成这项工作:

<form id="myForm" action="somecontroller/action">
  <input type="text" name="someValue" />
  <input type="submit" id="visualize" value="Visualize" name="visualize" formTarget="_blank" />
  <input type="submit" value="Submit" name="submit" />
</form>

可悲的是,该产品的主要用户群仍在使用IE8(它是一个内部网络),因此该网站只能处理IE8。我还没有找到一种方法来使这个简单的东西在javascript中工作。

我找到了this very nice answer并试图应用它,它在我的情况下不起作用,因为我猜它没有提交带有“visualize”参数的表单,因此我的操作不会将其作为预览处理。所以我让jQuery单击右键而不是提交表单:

$('#visualize').click(function(e) {
  if (!$('#myForm').prop('target')) {
    e.preventDefault(); //prevents the default submit action
    $('#myForm').prop('target', '_blank');
    $('#visualize').click();
  }
  else {
    $('#myForm').prop('target', null);
  }
});

这仍然不起作用。它只是在同一窗口中提交表单。

1 个答案:

答案 0 :(得分:0)

好吧,我终于解决了这个问题,所以这是一个(肮脏但有效)的解决方案:

    $('#visualize').click(function(e) {
            e.preventDefault(); //prevents the default submit action
            var $form = $(this).closest('form');
            $('<input />').attr('type', 'hidden')
            .attr('name', "visualize")
            .attr('id', "visualizeTemp")
            .attr('value', "1")
            .appendTo($form);
            $form.prop('target', '_blank').submit().prop('target', '_self');
            $('#visualizeTemp').remove();
    });

基本上我创建一个完整的临时隐藏input就像我的按钮(visualize)一样命名并提交表单。然后,我只删除我的临时input

作为旁注,我在调用$form.submit()时偶然发现this issue,所以我不得不rename my submitting button

<form id="myForm" action="somecontroller/action">
  <input type="text" name="someValue" />
  <input type="submit" id="visualize" value="Visualize" name="visualize" formTarget="_blank" />
  <input type="submit" value="Submit" name="save" />
</form>