我有一个登录提交表单,如下所示:
handleLoginSubmit: function() {
$('#login-form, .login-form').submit(function (e) {
e.stopPropagation();
var $form = $(this);
$.ajax({
url: 'loginURL',
type: 'POST',
data: $(this).serialize(),
success: function (r) {
if (r.redirect) {
window.location = r.redirect;
} else {
//Wrong username or password
}
}
});
});
},
这在我的计算机和其他计算机上工作正常。它似乎也适用于我的Android手机。但是我在iPad和iPhone上都尝试过这种方法并且都不起作用。
问题在于,当我提交表单时,我只会在屏幕上打印出这样的json数据:
{"login":true,"redirect":"https://frontpageurl"}
但它应该重定向到首页网址。
因此,登录时,在iPhone或iPad上,重定向到首页不起作用。
我首先尝试e.preventDefault()
,这似乎在这个项目的其他类似部分中运行良好。然后我尝试了e.stopPropagation()
和e.stopImmediatePropagation()
。这些似乎都没有改变任何东西。
答案 0 :(得分:1)
我怀疑它是什么 在您的计算机和Android手机上工作。
当您在e.stopPropagation();
有submit
电话的$.ajax()
事件中使用event.preventDefault();
时,我必须说这与任何事情无关。当您提交表单时,请提交。
如果您使用的是ajax,那么您要遵循的第一件事就是在您使用时停止表单提交。您可以使用handleLoginSubmit: function() {
$('#login-form, .login-form').submit(function (e) {
e.preventDefault();
// other code as is
},
执行此操作。所以,最好使用它:
e.stopPropagation();
关于<div class="body">
<div class="c1">blue</div>
<div class="c2">pink</div>
<div class="c3">green</div>
<div class="c4">yellow</div>
</div>
,它用于阻止事件在DOM树中冒泡,以便不执行绑定在父元素上的任何事件。在你的情况下,似乎没有发生,因为表格已经提交。