preventDefault()被window.location覆盖
我在我的网站上有几个步骤。 要导航,我有“上一个”和“下一个”按钮。 这些按钮是<a>
具有href属性的元素(用于访问上一步和下一步)。
下一个按钮可用作下一步的入口,但也可以在当前步骤中验证一些字段,然后继续。
所以这是点击下一个按钮时发生的情况:
$url
。 preventDefault()
阻止链接打开URL。 $url
将被加载到window.location中。 对于某些步骤,我需要用确认框对用户进行另一次检查。 但问题来了:
问题:
当confirm()
返回“false”时,用户不应该进入下一页。 但函数1的window.location
现在“否决了”函数2的preventDefault()
。
1.默认的下一个按钮功能:
$('#next_link').click(function(e) {
var url = $(this).attr('href');
e.preventDefault();
if(wiz_validate_required() && wiz_is_step_done()) {
window.location = url;
}
});
2.确认框功能:
$('.dimensions-check').click(function(e) {
if(confirm('Have you specified the dimensions in millimeters?') == false) {
e.preventDefault();
}
});
我会做那样的事情。 如果您对代码有任何疑问,请询问!
小提琴
// These can be changed for each step if you want or not a confirmation
var needs_confirm = true;
var cb_message = 'Have you specified the dimensions in millimeters?';
$('#next_link').click(function(e) {
var url = $(this).attr('href');
e.preventDefault();
if (needs_confirm === true) {
if (confirm_box(cb_message) === true) {
redirect_window(url);
}
} else {
redirect_window(url);
}
});
function confirm_box(cb_message) {
if (confirm(cb_message) === true) {
return true;
} else {
return false;
}
}
function redirect_window(url) {
if (wiz_validate_required() && wiz_is_step_done()) {
window.location = url;
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div id="next_link"><a href="#">link</a>
</div>
你在哪里叫维度检查?
e.preventDefault()仅取消提交表单的按钮的默认操作。 无论e.preventDefault如何,windows.location将始终将您重定向。
$('#next_link').click(function(e) {
var url = $(this).attr('href');
e.preventDefault();
if(wiz_validate_required() && wiz_is_step_done()) {
//If dimension isnot prompt{
//windows.location
//}else call dimension prompt
}
});
链接地址: http://www.djcxy.com/p/12425.html
上一篇: preventDefault() overruled by window.location
下一篇: window.location not evaluating until entire call stack is processed?