我有一个具有“预览”提交输入的表单,该表单提交与其他表单相同的表单,但是带有“可视化”参数,该参数必须打开一个新窗口(为了使表单保持其临时状态)。如果我正在设计闪亮的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);
}
});
这仍然不起作用。它只是在同一窗口中提交表单。
答案 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>