0

好的,所以我有这个 JavaScript/jQuery

$('.next').click(function(e){
  e.preventDefault();
  var table = $('table.active');
  var form = table.find('form');
  form.submit();
  window.location.href = '/some/location';
});

问题是,在某些浏览器Safari中,作为其中之一的浏览器form.submit()永远不会被调用。

我的猜测是这是一个异步请求,永远没有机会进行该调用。

关于如何做到这一点的任何想法。我尝试了以下

  form.submit(function(){
     window.location.href = '/some/location';
  });

但这没有用

4

5 回答 5

1

您也许可以通过 AJAX 做一些事情。

JavaScript/jQuery:

$(document).ready( function() {
    /* attach a submit handler to the form */
    $("#formID").submit(function(event) {

      /* stop form from submitting normally */
      event.preventDefault();

      /* get some values from elements on the page: */
      var $form = $( this ),
          term = $form.find( 'input[name="s"]' ).val(),
          url = $form.attr( 'action' );

      /* Send the data using post */
      var posting = $.post( url, { s: term } );

      /* Redirect the client */
      posting.done(function( data ) {
        window.location.href = '/some/location';
      });
 });
于 2013-08-23T21:16:51.933 回答
1

你需要类似的东西

$(function() {
  $('.next').click(function(e){
    e.preventDefault();
    var table = $('table.active');
    var form = table.find('form');
    $.post(form.attr("action"),function() {
      window.location.href = '/some/location';
    });
  });
});

带参数试试

    $.post(form.attr("action"),form.serializeArray(),function() {
于 2013-08-23T21:17:14.100 回答
1

这将在不同的浏览器中表现不同,如果允许 window.location 中断该请求,则允许覆盖表单的提交。

如果您打算将表单的内容作为 ajax 提交,则需要将表单字段收集到一个对象中,然后可以使用 ajax 发送该对象,并在 ajax 请求中将该对象发送到服务器,并在成功时重定向到页面你希望。

$.ajax({
  type: "POST",
  url: "some.php",
  data: stringifyedData
}).done(function ( data ) {
  window.location = "/some/location";
});
于 2013-08-23T21:18:30.020 回答
0

您将需要在/some/location表单action参数所在的页面上进行重定向。

于 2013-08-23T21:13:46.090 回答
0

您只需要延迟设置location.href,以便浏览器首先发送 Ajax 请求。您无需等待响应:

setTimeout(function(){
    window.location.href = '/some/location';
}, 1);
于 2013-08-23T21:22:11.787 回答