我已经通过ajax创建了一个wp登录表单,但问题是它只能在第二次工作,即用户填写密码和用户名,点击提交,不起作用,如果他们再次单击提交,则确实如此。有什么建议吗?
jQuery(document).ready(function($) {
// Perform AJAX login/register on form submit
$('body').on('submit', 'form#login2', function(e) {
if (!$(this).valid()) return false;
$('form#login2 p.status').show().text(ajax_auth_object.loadingmessage);
action = 'ajaxlogin';
username = $('form#login2 #username').val();
password = $('form#login2 #password').val();
email = '';
security = $('form#login2 #security').val();
ctrl = $(this);
$.ajax({
type: 'POST',
dataType: 'json',
url: ajax_auth_object.ajaxurl,
data: {
'action': action,
'username': username,
'password': password,
'email': email,
'security': security
},
error: function(jqXHR, status) {
$('form#login2 p.status').show().text('please try again');
},
success: function(jqXHR, status) {
document.location.href = ajax_auth_object.redirecturl;
}
});
e.preventDefault();
});
});
答案 0 :(得分:2)
您遇到的问题是您来电e.preventDefault()
太晚了。它应该是处理程序的第一行:
$('body').on('submit', 'form#login2', function(e) {
e.preventDefault();
if (!$(this).valid()) return false;
// Other code omitted
});
另外,另外,对于只有一个侦听器的情况,不再推荐使用preventDefault()
方法。您应该使用stopPropagation()
代替。