[英]Conditionally open url in new tab via js
我有一个类似调查的Web应用程序,其中用户选择了许多复选框,然后按“提交”按钮状的链接
<!-- page: /survey -->
<form id="survey" method="post" action="/complete">
<!-- checkboxes, etc here -->
<a id="submit" class="button" href="#">Submit</a>
</form>
<script>
$('#submit').on('click', function (e) {
e.preventDefault();
//... other staff happens here
$('#survey').submit();
});
</script>
然后在服务器上处理该表单,并在/complete
页面上将结果显示给用户。
我要实现的是在提交表单后有条件地打开一个新选项卡。 提交调查后,将在服务器上确定此条件和选项卡的url。
如果将window.open('...', '_blank')
插入初始/survey
页面上的click-event handler中,则可以使其无条件工作:
$('#submit').on('click', function (e) {
e.preventDefault();
//... other staff happens here
window.open('http://example.com', '_blank'); // <---- this line
$('#survey').submit();
});
但是,如果我在/complete
页面上使用window.open
,它将失败:而是出现一个弹出警告。 可能是因为它未连接到任何用户启动的事件。
但是,就我而言,有一个用户启动的事件,但它发生在上一页。 有什么办法可以将此事件传递给新页面(显然,新页面位于相同的域名,协议等上)。 可能还有另一种方法?
做您想做的正确方法是更改标记:
<form id="survey" method="post" action="/complete">
<!-- checkboxes, etc here -->
<button type="submit" id="submit" class="button">Submit</button>
</form>
然后在JavaScript中,监听submit
事件。 默认情况下,这将允许本机功能(例如隐式提交(文本字段中的输入键)或单击提交按钮的中键)起作用。
现在这里是一些重要的部分:
target
属性。 $('#survey').on('submit', function (e) {
if (!checkValidity(...)) {
e.preventDefault();
return;
}
//other stuff happens
var newTab = shouldOpenInNewTab(...);
$(this).attr('target', newTab ? '_blank' : '');
});
这样做将允许浏览器使用其默认行为。 它与跨浏览器兼容,并且可以访问。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.