2013-10-23 30 views
1

我想调用一个点击事件,然后按照href url。jQuery点击事件第一,然后按照网址

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调用,则提交工作。

+1

是您的形式标准POST/GET HTML形式,或者它有一个基于AJAX的POST方法? –

+0

我的表单是标准POST – user1040259

回答

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'); 
     }); 
    }); 
}); 
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'); 
    }); 
}); 
+0

由于他的表单是帖子,因此您不能发布数据并进行重定向。这是一个或另一个没有使用非常措施(弹出与父母重定向等)。 –

0

如果你的表格是一个标准的形式,最容易做的事情是设置一个隐藏的输入字段值到后续网址:

$(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.

这远非理想。有很多选项,但几乎所有的选项都是黑客,以便从单个事件中重复发布。

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');   
    } 
    }); 
} 
0

的问题是,浏览器不会等到它卸载的页面,并遵循链接之前的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; 
}) 
相关问题