我的表单中有一个操作链接,需要每分钟更新一次令牌。当用户点击提交按钮时,我从api调用中获取新的url / token。我正在使用这样的东西
<form id="somelink" action="http://some.external.url/" target="_blank" />
$('#somebutton').click(function(e) {
e.preventDefault();
var url = '/apicall?id=' + $('#someid').val();
$.post(url, function(data) {
$('#somelink').attr('action', data);
$('#somelink').submit();
问题是,在提交它时使用js / jQuery会在新窗口中打开而没有浏览器中的典型菜单和按钮,而且它的大小就是弹出窗口。
如果没有jQuery,只要点击按钮,它就会在新标签页中打开。
如何使用jQuery实现这一目标?
答案 0 :(得分:19)
尝试捕获表单的click
事件,而不是捕获submit
事件,如果发现任何错误,可以使用event.preventDefault();
的更新强>
在这里,我测试了这段代码,它工作正常,
<!doctype html />
<html>
<head>
<title></title>
<script type="text/javascript" src="jquery.js"/></script>
</head>
<body>
<form action='http://someSite.com' id='somelink' target='_blank'>
<input type='text' name='lol' id='lol'/>
<input type='submit'/>
</form>
<script type="text/javascript"/>
$('#somelink').on('submit',function(e) {
if($('#lol').val() == "poop"){ //Sample error check
e.preventDefault();
alert($('#lol').val());
}
});
</script>
</body>
</html>
这样做,如果您输入“poop”,它不会提交表单,因为它将表单提交给新标签。希望这有助于:)
更新:
关于您的评论,如果出现错误,您要打开其他标签,请将e.preventDefault()
替换为$(this).attr({"action":"http://www.someothersite.com"});
。希望这有助于:)
的更新强>
如果你想异步打开一个标签,那么你会很难,这是它可以得到的最接近的。
HTML部分
<form id="someForm" action="about:blank" target="newStuff" />
<input type="submit" value="12345" id="someid" />
Javascript Part
$(document).ready(function() {
$('#someForm').submit(function(e) {
$.ajax({
url: 'http://search.twitter.com/search.json?',
dataType: 'jsonp',
success: function(data) {
if (data != "") {
var link = "http://www.google.com/";
window.open(link,'newStuff'); //open's link in newly opened tab!
}
}
});
});
});
答案 1 :(得分:14)
我有同样的问题,这就是我解决它的方法:
<form action="..." method="POST" target="_blank">
<input type="submit" id="btn-form-submit"/>
</form>
<script>
$('#btn-submit').click( function(){ $('#btn-form-submit').click(); } );
</script>
这会将表单提交到新选项卡(_blank),而不使用本机提交按钮。
答案 2 :(得分:3)
jQuery("#availability_players_form").attr("target","_blank");
jQuery("#availability_players_form").submit();
#availability_players_form = form id
答案 3 :(得分:1)
您可以使用target="_newtab"
<a href="some url" target="_newtab">content of the anchor</a>
答案 4 :(得分:1)
默认情况下,表单提交到同一窗口,除非表单位于模态/无模式窗口对话框内。如果表单确实在模态/无模式对话框中,则需要使用目标形式设置窗口名称。 / p>
<head>
<script type="text/javascript">
window.name = "posthereonly";
</script>
</head>
并将表单目标更改为
<form id="somelink" action="http://some.external.url/" target="posthereonly" />
看看是否有帮助:)
答案 5 :(得分:1)
您已将目标定义为"_blank"
,因此请尝试下面的代码,查看示例链接,看看它是如何工作的......并在不提交的情况下尝试$.post
,或者您可以使用{{1}将数据保存在后台某处并将其发送到新标签..
ajax
或使用ajax
$(document).ready(function() {
$('#YourForm').submit(function() { // <---- Your form submit event
$(this).target = "_blank"; // <---- to new tab
$.post(url, function(data) {
// whatever you wanna post do it here
});
window.open($(this).prop('action')); // <---- form action attribute = url
return false; // <---- prevents submit
});
});
见这个例子:
http://jquerybyexample.blogspot.com/2012/05/open-link-in-new-tab-or-new-popup.html
修改:
$(document).ready(function() {
$('#YourForm').submit(function() { // <---- Your form submit event
$(this).target = "_blank"; // <---- to new tab
var json = $.toJSON({ yourjsondata1: data1, yourjsondata2: data2 });
$.ajax({
url: "/some/url",
type: "POST",
dataType: "json",
data: json,
contentType: "application/json; charset=utf-8",
success: function (data) {
window.open($(this).prop('action')); // <---- form action attribute = url
}
});
return false; // <---- prevents submit
});
});
答案 6 :(得分:0)
这个简单的东西对你有用,不需要Jake Weary - 只是vanilla JavaScript:
<a href="javascript:document.forms['order_filter'].target='_blank';document.forms['order_filter'].submit();">Print</a>
答案 7 :(得分:-1)
这对我很好。我试过这个。它可能会帮助你。根据您的要求进行一些更改,它会起作用。
<form action="..." method="GET" target="_blank">
<input type="submit" id-"btn-form-submit"/>
</form>
<script>
$('#btn-submit').click( function(){ $('#btn-form-submit').click(); } );
</script>