首先点击jQuery然后关注url

时间:2013-10-23 17:37:30

标签: javascript jquery html

我想调用click事件,然后按照href url。

HTML链接:

<a class="autoSave" href="?year=2013&amp;week=42">←</a>

JS:

 $(document).ready(function() { 

     $('.autoSave').click(function(event){
       event.preventDefault();
       $('.submitForm').click(); //HTML Form that I'm wanting a submit to happen
       window.location = $(this).attr('href');
     });

 }); 

上面的代码只会跟随网址而不是提交表单。如果我省略window.location调用,则提交有效。

5 个答案:

答案 0 :(得分:5)

您不必等待.click()事件完全处理才能调用window.location

您应该序列化您的表单,通过ajax发布(例如.post()),然后在.post()的回调中更改您的页面:

$(document).ready(function() { 

     $('.autoSave').click(function(event){
       event.preventDefault();
       var serializedData = $('#yourForm').serialize(); //For example
       $.post('your/path/to/form/validator', serializedData, function(){
          window.location = $(this).attr('href');
       });
     });
}); 

答案 1 :(得分:2)

如果浏览器没有尝试按照表单操作,则无法进行表单提交。您需要使用ajax将自动保存数据发布到提交表单,然后在ajax成功返回时执行窗口重定向。

 $('.autoSave').click(function(event){
   event.preventDefault();
   $.ajax({
      url: "whatever your submitForm.click() file is",
      type: "POST",
      data: {
        formField: theValue
        anotherFormField: theValue,
  },
  success: function( data ) {
        window.location = $(this).attr('href');         
  }
   });
}

答案 2 :(得分:0)

为您的表单id并使用submit()函数提交。在ID上使用jQuery选择器而不是类,特别是如果你回收你给它的类。

<强> HTML

<form id="submitForm">...</form>

<强>的Javascript

$(document).ready(function() { 
    $('.autoSave').click(function(event){
        event.preventDefault();
        $('#submitForm').submit(); 
        window.location = $(this).attr('href');
     });
});

答案 3 :(得分:0)

如果您的表单是标准表单,最简单的方法是将隐藏的输入字段值设置为后续URL:

$(document).ready(function() { 

     $('.autoSave').click(function(event){
       event.preventDefault();
       $('#redirectUrl').val($(this).attr('href'));
       $('.submitForm').click(); //HTML Form that I'm wanting a submit to happen
     });

 }); 

在这种情况下,您必须完全控制服务器端,并且您将能够测试该值并执行301.

这远非理想。有很多选择,但几乎所有选项都是hackish,以便从单一事件中双重发布。

答案 4 :(得分:0)

问题是浏览器不会等到for m提交完成后再卸载页面并跟随链接。

我建议将位置重定向移到表单提交的末尾:

$('.autoSave').on('click', function(event){
   event.preventDefault();
   $('.submitForm').triggerHandler('submit', [$(this).attr('href')]); 
 });

$('.submitForm').on('submit', function(event, url) {
 // Do the thing
 window.location = url;
})