2012-08-15 83 views
0

我有根據數據庫中的內容動態生成的鏈接。使用動態鏈接打開jQuery UI對話框

的聯繫最終看起來像

<ul> 
    <li><a href="/Updates/LoadArticle?NewsId=3" id="article">Article 3</a></li> 
    <li><a href="/Updates/LoadArticle?NewsId=2" id="article">Article 2</a></li> 
    <li><a href="/Updates/LoadArticle?NewsId=1" id="article">Article 1</a></li> 
</ul> 

我拼湊起來的腳本是

$(document).ready(function() { 

     $("#article").click(function (e) { 
      InitializeDialog($("#news"), $(this).attr("href")); 
      e.preventDefault(); 
      $("#news").dialog("open"); 
     }); 


     //Method to Initialize the DialogBox 
     function InitializeDialog($element, page) { 

      $element.dialog({ 
           autoOpen: true, 
           width: 400, 
           resizable: false, 
           draggable: true, 
           title: "Update", 
           modal: true, 
           show: 'fold', 
           closeText: 'x', 
           dialogClass: 'alert', 
           closeOnEscape: true, 
           position: "center", 
           open: function (event, ui) { 
            $element.load(page); 
           }, 

           close: function() { 
            $(this).dialog('close'); 
           } 
       }); 
     } 
    }); 

這適用於在列表中的第一篇文章 - 打開的對話框中,但orther文章打開一個單獨的頁面。我假設這是因爲ID不是唯一的。

我的問題更多的是如何爲任何id(比如article1,article2等)創建一個通用的jQuery函數。

我已經在jQuery上進行了大約20分鐘的培訓,所以我在黑暗中拍攝了什麼地方。

謝謝。

+2

標識*真的*應該是獨一無二的DOM。 – techfoobar 2012-08-15 15:45:54

+0

@Erik:您可能對我的jQuery插件dialogWrapper感興趣:https://bitbucket.org/MostThingsWeb/dialogwrapper/wiki/Home它簡化了動態創建對話框。 – 2012-08-15 15:46:31

+0

理想情況下,您應該爲每個鏈接使用class =「article」,並使用$('。article')進行事件綁定。 – techfoobar 2012-08-15 15:46:47

回答

4

這適用於列表中的第一篇文章 - 對話框打開,但 其他文章在單獨的頁面中打開。我假設這是 ,因爲ID不是唯一的。

你說得對,具有相同ID的2個或多個元素是無效的HTML,並且會給你帶來各種各樣的問題。

取出id屬性和使用class屬性來代替:

<ul> 
    <li><a href="/Updates/LoadArticle?NewsId=3" class="article">Article 3</a></li> 
    <li><a href="/Updates/LoadArticle?NewsId=2" class="article">Article 2</a></li> 
    <li><a href="/Updates/LoadArticle?NewsId=1" class="article">Article 1</a></li> 
</ul> 

然後代替:

$("#article").click() 

用途:

$(".article").click() 
+0

'id'與'class'搭配很好# – 2012-08-15 15:48:28

+1

+1。如果你有多個具有相同ID值的元素,你的$('#article')選擇器只會返回第一個匹配元素,而不是所有具有該ID的元素。這是因爲「所有具有特定ID的元素」本身是錯誤的。 – techfoobar 2012-08-15 15:49:27

+0

完美地工作。如此簡單,我必須b起頭來爲我的愚蠢之罪付出代價。 :) – Erik 2012-08-15 16:05:25