2013-04-17 36 views
1

我有一個包含三個按鈕的jquery對話框。當用戶點擊一個鏈接時,我想抓住一個變量的href,阻止鏈接執行,並顯示我的對話框,選項爲保存,放棄或取消。在保存或放棄時,我想導航到他們點擊的鏈接。我正在php/jquery中工作。Jquery對話框href變量不在按鈕中更新

除了如果用戶點擊鏈接「A」,並點擊對話框上的取消,然後點擊鏈接「B」並選擇放棄對話框,瀏覽器導航到鏈接「A」而不是「B」!

我在做什麼錯?

這裏是我的代碼,我將更多地解釋如下:

 function myFunction(href) { 
     if (check == false) { 
      alert (href); 
      $('#replaceSave').hide(); 
      $("#tabWarn").dialog("open"); 
      $(function() { 
      alert (href); 
       $("#tabWarn").dialog({ 
        resizable: false, 
        height:240, 
        width:400, 
        modal: true, 
        buttons: { 
        Cancel: function() { 
         check = false; 
         setConfirmUnload(true); 
         $(this).dialog("close"); 
        }, 
        "Discard": function() { 
          alert(href); 
          check = true; 
          setConfirmUnload(false); 
          alert(href); 
          if (href != 'no') { 
           window.location.href = href; 
          } 
          $(this).dialog("close"); 
        }, 
        "Save": function() { 
          saveFunction(); 
          if (href != 'no') { 
           setTimeout(function() { window.location.href = href; }, 2000); 
          } 
          $('#replaceSave').show(); 
          setTimeout(function() { $('#tabWarn').dialog("close"); }, 2000); 
        }, 
        } 
       }); 
      }); 
     } 
    } 

HREF的第一個警報始終顯示正確的地址。當我點擊鏈接「A」,然後選擇取消時,所有警報顯示「A」。但是當我回去並點擊鏈接「B」並選擇丟棄時,所有提醒都會顯示鏈接「B」,除了丟棄按鈕內的提醒 - 它們會顯示鏈接「A」。因此,即使點擊了「B」,頁面仍然導航爲「A」。

如果我先點擊鏈接「B」並選擇丟棄,它會正常工作。如果我選擇取消,然後再次點擊並選擇另一個鏈接,它只會工作不正確。

僅供參考,href始終設置。死鏈接當前通過'否'功能。但是,上述所有問題都與實時鏈接和死鏈接有關。

這裏是調用該函數的代碼:

 $('a.chk').click(function (event) { 
      if (check == false) { 
       var addressValue = $(this).attr("href"); 
       //alert(addressValue); 
       setConfirmUnload(false); 
       event.preventDefault(); 
       return myFunction(addressValue); 
      } 
     }); 

我將不勝感激您的投入!

我已經搜索了類似的問題,並沒有找到任何東西,但我可能錯過了一個,因爲我不知道如何搜索這個問題!

+0

你似乎對任何鏈接都使用相同的對話框,你有沒有嘗試先點擊B,然後回去A?如果發生類似(但相反)的問題,那麼解決方案將是關閉對話框並在打開時重新創建對話框。這可以通過許多方式完成。 – cernunnos

+0

是的,我點擊它們的順序並不重要,我會嘗試一次破壞而不是結束。 – dwlorimer

+0

謝謝!毀滅確實解決了這個問題。它現在工作正常。我仍然不確定爲什麼它有這樣的行爲,但我很高興有一些工作。我會+1,但我還沒有足夠的聲望。將它作爲答案發布,我會將其設置爲已接受。再次感謝。 :) – dwlorimer

回答

1

嘗試dinamically生成和破壞對話

function customConfirm(msg, href) { 
    var container = $("<div/>").append(msg); 

    $(container).dialog({ 
    // your dialog stuff 
    close: function() { 
     $(this).remove(); 
    }     
    }); 
} 

// If you want to keep your #tabWarn 
customConfirm($("#tabWarn").html(),href); 

// If you want some custom msg 
customConfirm("Are you sure you want to do that?",href); 

至於爲什麼發生:jQuery UI的對話框的默認行爲是顯示或隱藏對話框股利一旦對話框已連接到它。你可以使用舊的方法(不是銷燬)來測試它,打開它一次,然後檢查DOM,你應該看到一個隱藏的div在body的末尾。

因此,您第二次單擊了使用首次創建的對話框的鏈接時,第一次鏈接的配置。

+0

謝謝!銷燬對話而不是關閉它的工作。 :)並感謝您的解釋。 – dwlorimer