在 IE8 中通过一个按钮(在多个按钮中)以新的 window 提交表单
Submit form in new window from one button (out of many) in IE8
我有一个带有 "preview" 提交输入的表单,它提交与其他表单相同的表单,但带有一个 "visualize" 参数,该参数必须打开一个新的 window(为了使表格保持在临时状态)。如果我正在为闪亮干净的 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);
}
});
这还是不行。它只是以相同的方式提交表单 window.
好吧,我终于解决了这个问题,所以这是一个(肮脏但有效的)解决方案:
$('#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();
});
基本上,我创建了一个与我的按钮 (visualize
) 一样命名的整个临时隐藏 input
,然后提交表单。然后,我只是删除我的临时 input
.
作为旁注,我还偶然发现了 this issue when calling $form.submit()
so I had to 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>
我有一个带有 "preview" 提交输入的表单,它提交与其他表单相同的表单,但带有一个 "visualize" 参数,该参数必须打开一个新的 window(为了使表格保持在临时状态)。如果我正在为闪亮干净的 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);
}
});
这还是不行。它只是以相同的方式提交表单 window.
好吧,我终于解决了这个问题,所以这是一个(肮脏但有效的)解决方案:
$('#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();
});
基本上,我创建了一个与我的按钮 (visualize
) 一样命名的整个临时隐藏 input
,然后提交表单。然后,我只是删除我的临时 input
.
作为旁注,我还偶然发现了 this issue when calling $form.submit()
so I had to 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>