2012-12-26 34 views
5

我正在創建一個裏面有跨度的li項目。我在span中構建了一個onclick函數來獲取父li的ID以傳遞給JSON get請求。我不確定如何創建一個唯一的ID並在JS函數中讀取它。由於這是動態構建的,我沒有構建開關,但我覺得我錯過了另一種選擇。 這裏的問題是我無法捕獲李ID。我已經嘗試過,也嘗試過基於類,但都似乎失敗了。JS或Jquery創建獨特的跨度ID

李對象的創建:

$("#jdLists").append('<li class="bigger" id = "' + item.ID + '">'+ 
    item.GROUP_NAME + 
    '<span title="Remove from list" class=" Sp icon icon-color icon-plus" style="float: right; vertical-align: middle;" '+ 
    'onclick="spAdd()"></span>' + 
    '</li>'); 

上點擊功能:

function spAdd() { 
    $(this).closest("li").attr('id'); 
} 
+0

該函數不會執行任何操作;它獲取「id」的值,但它不會對它做任何事情。 – Pointy

+1

你如何保持這樣的代碼? – elclanrs

+0

這是正確的,當我在瀏覽器中觀看時,它也沒有獲取值,我假設它是因爲它不知道哪個li發送請求。我還沒有添加任何其他東西,因爲這 – atlMapper

回答

18

嘗試這樣的:

// Should work for most cases 
function uniqId() { 
    return Math.round(new Date().getTime() + (Math.random() * 100)); 
} 

// Create elements properly and attach click event 
// before appending to DOM so it delegates the event 
var $li = $('<li/>', { 
    'class': 'bigger', 
    id: uniqId() 
}); 

var $span = $('<span/>', { 
    'class': 'Sp icon icon-color icon-plus', 
    title: 'Remove from list', 
    text: 'I\'m a span', 
    click: function() { 
    alert($(this).parent().attr('id')); 
    } 
}); 

$('#jsLists').append($li.append($span)); 

應該提醒上點擊李的隨機ID。而不是內聯的CSS,爲這些樣式添加另一個類;更好,更簡單,更容易。

演示:http://jsbin.com/avevim/1/edit(Ctrl + Enter以刷新,並獲得新的ID)

+0

太棒了,這是完美的。關於如何在Jquery中構建li和span對象的文檔是什麼。我需要確保我明白這一點以備將來使用 – atlMapper

+0

@atlMapper:以下是它的文檔。這是jQuery方法。 http://api.jquery.com/jQuery/ – elclanrs

4

下劃線提供了這樣的情況下,uniqueId功能。而不是與日期和隨機數棘手,它只是保持一個全局計數器,並在每次調用該函數時遞增它:

var idCounter = 0; 
_.uniqueId = function(prefix) { 
    var id = '' + ++idCounter; 
    return prefix ? prefix + id : id; 
};