2011-08-09 77 views
0

我試圖完成以下任務:單擊問題 - 確認警報不會阻止HREF點擊

當用戶點擊包含複選框,如果任一複選框被檢查,一個一個div(「productListMatch」)的外確認警報出現,讓用戶知道他們沒有保存在那裏複選框選擇。

總之,我在檢查一個檢查項是否保存。如果是這樣,通知用戶,讓他們選擇保存或不保存。

這是我做了什麼:

function formCheckboxConfirm() { 
    $('html').click(function() { 
     var elem = document.getElementById('frm-list-product').elements; 
     for (i = 0; i < elem.length; i++) { 
      if(elem[i].type == "checkbox" && elem[i].checked) { 
       confirm("You have made changes! Do you want to proceed without saving your changes?"); 
       break; 
      } 
     } 
}); 

    $(".productListMatch").click(function(e) { 
     e.stopPropagation(); // I thought this would stop all link clicks, but it's not working as I expected. 
    }); 
} 

雖然這部作品在一般情況下,它不與聯繫工作。點擊它們後,它們會繼續執行,並且我仍然收到確認提醒。

注意:在div外部的網頁上有許多導航鏈接。 「productListMatch」div本身是jquery選項卡(兩個中的第二個)內的一部分內容,因此必須單擊該選項卡才能看到「productListMatch」div。

我想是這樣的:

  • 如果任何一個環節 - 除了複選框(和保存按鈕) - 點擊從執行
    • 執行
      • 停止鏈接檢查複選框是否被選中
        • 如果複選框被選中,請提供確認提示
          • 如果用戶點擊「確定」按鈕,網頁將繼續鏈接,最初點擊
          • 如果用戶點擊「取消」,網頁無法繼續鏈接,最初點擊
        • 如果未選中複選框,沒有確認的警報,並繼續網頁鏈接,最初檢查

我嘗試了幾個場景,儘管我可以讓鏈接停止(我使用了preventDefault),但我不確定如何讓它們重新開始。也許我正在對這件事做錯。

我希望得到一些幫助。

謝謝。

斯蒂芬

回答

1

confirm()函數返回你需要測試一個布爾值。例如:

if confirm("You have made changes! Do you want to proceed without saving your changes?") { 
    // continue or whatever 
} else { 
    return false; // or break or whatever 
} 
+0

謝謝JMax。這對一些鏈接起作用。但是,其他鏈接有內聯點擊。而且,儘管嘗試這麼做了幾天,但我找不到一種方法來禁用它們,獲取確認信息,並在確認爲「確定」時重新啓用它們。我最初並沒有意識到這一點,當我發佈(別人寫的代碼)。不過謝謝。 – user282648

+0

您可以將事件綁定到DOM的父元素,而不是使用內聯onclicks並使用['event.stopPropagation()'](http://api.jquery.com/event.stopPropagation/)來避免觸發另一個點擊,如果用戶不確認 – JMax

+0

我做了這樣的事情 - http://stackoverflow.com/questions/7041576/help-with-converting-inline-onclick - 雖然我沒有使用綁定方法。這聽起來像我想要使用的。 – user282648