我想调用click事件,然后按照href url。
HTML链接:
<a class="autoSave" href="?year=2013&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调用,则提交有效。
答案 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;
})