这是JQuery:
$(document).ready(function() {
$('#autosave').click(function() {
var url = window.location.pathname;
$postData = $('#content form:first').serialize() + '&'
+ $('#content form:first .input-submit').attr('name')
+ '=Save';
$.post(url, $postData, function(data) {
//
});
});
});
它应该做什么:
单击#autosave链接后,页面上#content div中的第一个表单将使用POST方法提交。之后,用户将被带到链接目标。
此:
$postData = $('#content form:first').serialize() + '&'
+ $('#content form:first .input-submit').attr('name')
+ '=Save';
从表单中收集数据,并将提交按钮添加到最后(因为在PHP代码中,我正在检查是否先提交了提交按钮,然后进行表单验证和处理)。
此:
var url = window.location.pathname;
是提交表单的URL(与表单所在的页面相同)。
问题当然是它不起作用。
点击链接后,我被带到链接目标,但表单尚未提交(因为数据库中没有任何更改)。
有什么想法吗?
编辑:
XHTML片段:
<form enctype="application/x-www-form-urlencoded" method="post"
action="/my-account/account-details"><ol>
<fieldset id="fieldset-your_details"><legend>Your Details</legend>
<li><label for="name" class="optional">Name</label>
<div class="element">
<input type="text" name="name" id="name" value="Name..." class="input-text" /></div></li>
<li><label for="town_city" class="optional">Town/City</label>
<div class="element">
<input type="text" name="town_city" id="town_city" value="Town/City..." class="input-text" /></div></li>
<li><label for="country" class="optional">Country</label>
<div class="element">
<select name="country" id="country">
<option value="United Kingdom" label="United Kingdom" selected="selected">United Kingdom</option>
<option value="United States" label="United States">United States</option>
...
<option value="Zimbabwe" label="Zimbabwe">Zimbabwe</option>
</select></div></li>
<li><label for="county" class="optional">County</label>
<div class="element">
<input type="text" name="county" id="county" value="County..." class="input-text" /></div></li></fieldset>
<fieldset id="fieldset-about"><legend>About Me</legend>
<li><label for="about_me" class="optional">About Me</label>
<div class="element">
<textarea name="about_me" id="about_me" rows="10" cols="50">Tell people about yourself...</textarea></div></li></fieldset>
<fieldset id="fieldset-looks"><legend>Looks</legend>
<li><label for="hair" class="optional">Hair</label>
<div class="element">
<input type="text" name="hair" id="hair" value="Hair..." class="input-text" /></div></li>
<li><label for="eyes" class="optional">Eyes</label>
<div class="element">
<input type="text" name="eyes" id="eyes" value="Eyes..." class="input-text" /></div></li>
<li><label for="height" class="optional">Height</label>
<div class="element">
<input type="text" name="height" id="height" value="Height..." class="input-text" /></div></li>
<li><label for="weight" class="optional">Weight</label>
<div class="element">
<input type="text" name="weight" id="weight" value="Weight..." class="input-text" /></div></li>
<li><label for="body_type" class="optional">Body Type</label>
<div class="element">
<input type="text" name="body_type" id="body_type" value="Body Type..." class="input-text" /></div></li>
<li><label for="dress_size" class="optional">Dress Size</label>
<div class="element">
<input type="text" name="dress_size" id="dress_size" value="Dress Size..." class="input-text" /></div></li>
<li><label for="bust_size" class="optional">Bust Size</label>
<div class="element">
<input type="text" name="bust_size" id="bust_size" value="Bust Size..." class="input-text" /></div></li>
<li><label for="waist" class="optional">Waist</label>
<div class="element">
<input type="text" name="waist" id="waist" value="Waist..." class="input-text" /></div></li>
<li><label for="best_features_looks" class="optional">Best Features</label>
<div class="element">
<input type="text" name="best_features_looks" id="best_features_looks" value="Best Features..." class="input-text" /></div></li>
<li><label for="tattoos_piercings" class="optional">Any Tattoos/Piercings</label>
<div class="element">
<input type="text" name="tattoos_piercings" id="tattoos_piercings" value="Any Tattoos/Piercings..." class="input-text" /></div></li></fieldset>
<fieldset id="fieldset-personal"><legend>Personal</legend>
<li><label for="gender" class="optional">Gender</label>
<div class="element">
<select name="gender" id="gender">
<option value="Male" label="Male" selected="selected">Male</option>
<option value="Female" label="Female">Female</option>
</select></div></li>
<li><label for="job" class="optional">Job</label>
<div class="element">
<input type="text" name="job" id="job" value="Job..." class="input-text" /></div></li>
<li><label for="star_sign" class="optional">Star Sign</label>
<div class="element">
<input type="text" name="star_sign" id="star_sign" value="Star Sign..." class="input-text" /></div></li>
<li><label for="sexuality" class="optional">Sexuality</label>
<div class="element">
<input type="text" name="sexuality" id="sexuality" value="Sexuality..." class="input-text" /></div></li>
<li><label for="marital_status" class="optional">Marital Status</label>
<div class="element">
<input type="text" name="marital_status" id="marital_status" value="Marital Status..." class="input-text" /></div></li>
<li><label for="hobbies" class="optional">Hobbies And Interests</label>
<div class="element">
<input type="text" name="hobbies" id="hobbies" value="Hobbies And Interests..." class="input-text" /></div></li>
<li><label for="cigarettes" class="optional">Do You Smoke</label>
<div class="element">
<input type="text" name="cigarettes" id="cigarettes" value="Do You Smoke..." class="input-text" /></div></li>
<li><label for="alcohol" class="optional">Do You Drink Alcohol</label>
<div class="element">
<input type="text" name="alcohol" id="alcohol" value="Do You Drink Alcohol..." class="input-text" /></div></li>
<li><label for="drugs" class="optional">Do You Take Drugs</label>
<div class="element">
<input type="text" name="drugs" id="drugs" value="Do You Take Drugs..." class="input-text" /></div></li>
<li><label for="best_features_personal" class="optional">Best Features</label>
<div class="element">
<input type="text" name="best_features_personal" id="best_features_personal" value="Best Features..." class="input-text" /></div></li></fieldset>
<fieldset id="fieldset-profile_theme"><legend>Profile Theme</legend>
<li><label for="username_color" class="optional">Username Color</label>
<div class="element">
<input type="text" name="username_color" id="username_color" value="" class="input-text" /></div></li>
<li><label for="menu_color" class="optional">Menu Color</label>
<div class="element">
<input type="text" name="menu_color" id="menu_color" value="" class="input-text" /></div></li>
<li><label for="header_color" class="optional">Header Color</label>
<div class="element">
<input type="text" name="header_color" id="header_color" value="" class="input-text" /></div></li>
<li><label for="front_color" class="optional">Front Color</label>
<div class="element">
<input type="text" name="front_color" id="front_color" value="" class="input-text" /></div></li></fieldset>
<li class="clear"><div class="button">
<input type="submit" name="account_details" id="account_details" value="Save" class="input-submit left" /></div></li></ol></form>
<div class="clear"> </div>
<p class="pad-top"><a href="/view/profile/id/2" class="blue" id="autosave">View Profile</a></p>
答案 0 :(得分:1)
尝试:
$(document).ready(function() {
$('#autosave').click(function() {
var url = window.location.pathname;
$postData = $('#content form:first').serialize() + '&'
+ $('#content form:first .input-submit').attr('name')
+ '=Save';
$.post(url, $postData, function(data) {
window.location.href = url;
});
return false;
});
});
编辑:我的不好,window.location.href = url;
应该是window.location.href = $(this).attr('href');
,正如tvanfosson在他的回答中所做的那样。
EDIT2 :
这适用于我(使用PHP后端脚本测试),使用您的HTML代码(包装成<div id="content">YOUR HTML</div>
):
$('#autosave').click(function() {
var url = window.location.pathname;
$postData = $('#content form:first').serialize() + '&'
+ $('#content form:first .input-submit').attr('name')
+ '=Save';
$.post(url, $postData, function(data) {
window.location.href = $('#autosave').attr('href');
});
return false;
});
答案 1 :(得分:1)
您需要在帖子实际返回后导航到链接目标。这样,当遵循链接href时,将不会卸载(并且不提交)挂起的帖子请求。
$(document).ready(function() {
$('#autosave').click(function() {
var url = $(this).closest('form').attr('action');
$postData = $('#content form:first').serialize() + '&'
+ $('#content form:first .input-submit').attr('name')
+ '=Save';
$.post(url, $postData, function(data) {
// take link after post
window.location.href = $(this).attr('href');
});
return false; // stops initial link action
});
});
如果不应该使用链接,请更改回调函数以使用数据 在服务器端验证失败的情况下。使用if语句对返回的数据进行简单检查就足够了。