2012-06-12 64 views
1
另一頁

使用我有一個動態填充的項目清單:保存選定變量的數據

 function ViewData(data) { 
     var SI = (typeof data) == 'string' ? eval('(' + data + ')') : data; 
     $('#ListContainer').empty(); 
     for (var i = 0; i < SI.length; i++) { 
      var text = '<a href="Page.htm" rel="external" onclick= "SaveData();" 
         class="lesson" LessonID="' + SI[i].lessonID 
         '"><span class="lesson_subject">' + SI[i].sbj_Name + 
         '</span></b></a> 
      $('#ListContainer').append(text).trigger("create"); 
     } 
    } 

當點擊其中的一個項目,該頁面應該定位到攜帶該數據的另一頁這個鏈接。

我做了這個功能,以節省的鏈接中找到的值:

function SaveData() { 
     localStorage["LessonID"] = $('#ListContainer').find('.lesson').attr('LessonID'); 
     localStorage["SubjectName"] = $('#ListContainer').find('.lesson_subject').text(); 
     } 

也可節省「所有的數據」。我只想保存所選項目的數據。 你有什麼想法嗎? 謝謝。

回答

5

它會保存所有數據,因爲您的find('.lesson')會找到#ListContainer中的所有鏈接。我建議您刪除內聯事件處理程序,並與on方法以事件代表團的優勢:

$("#ListContainer").on("click", ".lesson", function() { 
    localStorage["LessonID"] = $(this).data("lessonid"); 
    localStorage["SubjectName"] = $(this).data("subject"); 
}); 

請注意,我用的data方法,而不是attr。這將需要另一改變您的標記:

<a href="Page.htm" rel="external" class="lesson" data-lessonid="someID" data-subject="someSubject"> 

這將使用HTML5 data-*屬性,這是建議的方法,當涉及到存儲元素上的任意數據。


爲什麼要使用事件委託?它更有效率,因爲它導致更少的事件處理程序綁定到元素。而不是每個a.lesson元素上都有一個元素,#ListContainer元素上只有一個元素。

由於大多數DOM事件都會在樹上冒泡,因此點擊#ListContainer的後裔將通過DOM樹向上冒泡,最終達到#ListContainer。 jQuery on方法將在此元素中選取事件,並檢查它是否源於匹配.lesson的元素。如果是這樣,它將執行事件處理程序。

+0

這真的很有幫助,非常感謝。 –

+0

@SanaJoseph - 不客氣,很高興我可以幫助:) –

1

你在混合舊世界的JavaScript和jQuery。

使用$("<a ...")創建您的元素,追加它,然後附加一個.click處理程序,它可以在觸發時使用$(this)。當您添加.click處理程序可以使用的元素時,使用.data向元素添加數據。

+0

好的,我會改變我的方法,非常感謝。 –

3

更改此

onclick= "SaveData();" 

onclick= "SaveData(this);" 

saveData功能然後換

function SaveData(elem) { 
     localStorage["LessonID"] = $(elem).attr('LessonID'); 
     localStorage["SubjectName"] = $(elem).find('.lesson_subject').text(); 
     } 

甚至更​​好,你可以使用$.on像@詹姆斯阿勒代斯表現出他的回答。

+0

剛剛鍵入相同的內容。 – Playmaker

+0

非常感謝。 –

+0

非常歡迎您,很高興能夠提供幫助。 :) –