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()メソッドを手動で呼び出しても、デフォルトのアクションを無効にするチェーンをたどっています。そのため、目的のページにリダイレクトされません。click()trueで始まる別の状態変数を追加する必要があります。これにより、prevent defaultブランチがトリガーされ、 withinの手動呼び出しの直前にfalseに設定されますnavigateToInv()

于 2013-02-08T05:52:35.683 に答える