有一个锚标记:inventoryHome,它将用户带到另一个页面。
如果rateMap的大小大于0,我需要显示一个确认弹出窗口,确认用户是否要放弃未保存的更改。
如果用户确认丢弃,则调用navigateToInv()方法。
在下面的代码中,虽然调用了navigateToInv()方法&点击事件被触发,页面未导航到新页面。
<li><a href="<%=request.getContextPath()%>/inventory" id="inventoryHome"> <spring:message code="inventoryTab" /></a></li>
$('#inventoryHome').click(function(e) {
if (Object.size(rateMap) > 0) {
e.preventDefault();
showDiscardConfirmationPopUp(navigateToInv, false);
}
});
var navigateToInv = function (){
rateMap = new Object();
$('#inventoryHome').trigger('click');
}
Object.size = function(obj) {
var size = 0, key;
for (key in obj) {
if (obj.hasOwnProperty(key)) size++;
}
return size;
};
无法识别问题。
答案 0 :(得分:1)
问题是在锚标记上调用trigger('click')
不会导致它导航到href值指定的页面。请参阅this answer。
您必须将window.location
设置为href值,或更改逻辑,以便仅在用户选择不放弃更改后才调用e.preventDefault()
,如下所示:
$('#linkId').click(function(e) {
if (hasUnsavedChanges() && !confirmDiscard()) {
e.preventDefault();
}
}
在你的情况下,它将是:
$('#inventoryHome').click(function(e) {
if (!$.isEmptyObject(rateMap) && !confirm("Discard changes?")) {
e.preventDefault();
}
}
答案 1 :(得分:0)
我的成就与:
相同var navigateToInv = function(){
document.location.href= $("#inventoryHome").attr('href');
}
$('#inventoryHome').click(function(e) {
if (Object.keys(ratePopUpMap).length > 0) {
e.preventDefault();
showDiscardConfirmationPopUp(navigateToInv, false);
}
})
答案 2 :(得分:-1)
问题似乎是rateMap
永远不会变为<= 0
。因此,即使您手动调用click()
方法,它仍然会跟随禁用默认操作的链,这就是它不会重定向到所需页面的原因。您应该添加另一个开始为true的状态变量,因此它会触发prevent default分支,然后在click()
内手动调用navigateToInv()
之前立即设置为false。