2013-05-01 115 views
0

我點擊一個刪除按鈕(我有一個用戶列表與他們的相關ID和刪除按鈕,基於他們的ID將被刪除)被調用正常工作:jQuery對話框確認刪除不會觸發刪除

function confirmDelete(name, deleteURL) { 
    var description = "Delete " + name + "?"; 
    var check = confirm(description); 
    if(check == true) { 
     self.location = deleteURL; 
    } else { 
     window.location.deleteURL = deleteURL; 
    } 
    return false; 
} 

然後,我決定重寫確認功能,並把它轉化爲一個jQuery對話框如下所示:

$(function() { 

    window.confirm = function (message) { 
     $('#overrideAlert').text(message).dialog({ 
      resizable: false, 
      height: 140, 
      modal: true, 
      buttons: { 
       "Delete item": function() { 
        $(this).dialog("close"); 
       }, 
       Cancel: function() { 
        $(this).dialog("close"); 
       } 
      } 
     }); 
    }; 
}); 

當我點擊刪除鏈接,jQuery的對話框正常彈出,但當我點擊'刪除項目'時,它實際上並沒有觸發刪除只關閉對話框(應該如此)。我在這裏錯過的可能是應該有辦法(與JavaScript確認觸發刪除,當選擇確定時)刪除我的項目。 任何人都可以讓我知道我在這裏想念什麼?謝謝。

+0

問題是你需要首先觸發confirmDelete以獲取轉換爲jQuery的對話框中的第二部分? – ComeRun 2013-05-01 06:41:55

+0

@jahroy其簡單。第二個腳本在那裏覆蓋任何確認jQuery對話框。 confirmDelete需要先被調用,那就是我的意思 – ComeRun 2013-05-01 06:48:32

+0

@jahroy是啊我有數百頁使用alert,所以我想我會重新定義而不是一個大的變化 – ComeRun 2013-05-01 06:49:37

回答

1

您可能需要重新編寫confirmDelete()才能完成此項工作。

也許是這樣的:

function confirmDelete(name, deleteURL) { 
    var description = "Delete " + name + "?"; 
    confirm(description, doDelete, deleteURL); 
} 

function doDelete(check, deleteURL) { 
    if(check == true) { 
     self.location = deleteURL; 
    } else { 
     window.location.deleteURL = deleteURL; 
    } 
} 


$(function() { 

    window.confirm = function (message, callbackFunc, funcArg) { 
     $('#overrideAlert').text(message).dialog({ 
      resizable: false, 
      height: 140, 
      modal: true, 
      buttons: { 
       "Delete item": function() { 
        $(this).dialog("close"); 
        if ($.isFunction(callbackFunc)) { 
         callbackFunc(true, funcArg); 
        } 
       }, 
       Cancel: function() { 
        $(this).dialog("close"); 
        if ($.isFunction(callbackFunc)) { 
         callbackFunc(false, funcArg); 
        } 
       } 
      } 
     }); 
    }; 
}); 

更重要的是,你可以傳遞一個回調函數,你確認功能...

+0

非常感謝這應該工作得很好。 – ComeRun 2013-05-01 06:59:35

+0

太好了。對不起,我起初誤讀了這個問題......另外,我開始編輯問題,以便將回調函數傳遞給_new_ confirm函數,但由於您已經接受了答案,因此我將它保留原樣。 – jahroy 2013-05-01 07:00:40

+0

你可以請你做你的改變? ;) – ComeRun 2013-05-01 07:03:35

0

我拿這個的方法是有.confirm功能返回promise

var confirm = function() { 
    var def = $.Deferred(); 
    ... 
     "Delete Item": function() { 
      $(this).dialog('close'); 
      def.resolve(); 
     }, 
     "Cancel": function() { 
      def.reject(); 
     } 
    } 
    return def; 
} 

confirm("prompt").done(function() { 
    console.log('success'); 
}).fail(function() { 
    console.log('cancel'); 
});