jQuery将表单提交到新标签?

时间:2013-01-25 17:46:11

标签: jquery

我的表单中有一个操作链接,需要每分钟更新一次令牌。当用户点击提交按钮时,我从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实现这一目标?

8 个答案:

答案 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
   });
});​

小提琴:http://jsfiddle.net/BerkerYuceer/nfTWL/

答案 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>