0

有一个锚标签: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;
 };

无法识别问题。

4

3 回答 3

1

问题是调用trigger('click')锚标记不会导致它导航到由 href 值指定的页面。看到这个答案

您要么必须设置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();
    }
}
于 2013-02-08T06:21:07.853 回答
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);
     }
})
于 2013-07-16T06:34:41.603 回答
-1

问题似乎rateMap是永远不会改变为<= 0. 因此,即使您click()手动调用该方法,它仍然会遵循禁用默认操作的链,这就是它不会重定向到所需页面的原因。您应该添加另一个以 true 开头的状态变量,因此它会触发 prevent default 分支,然后在手动调用click()within之前立即设置为 false navigateToInv()

于 2013-02-08T05:52:35.683 回答