2012-12-26 8 views
5

Sto creando un oggetto li con una span all'interno. Ho costruito una funzione onclick nello span per catturare l'ID del genitore principale da passare a una richiesta di ottenere JSON. Non sono sicuro di come creare un ID univoco e leggerlo nella funzione JS. Dal momento che questo è stato costruito dinamicamente, non ho creato un interruttore, ma mi sento come se mi mancasse un'altra opzione. Il problema qui è che non riesco a catturare l'ID Li. Ho provato questo e anche provato in base alla classe, ma sembra che tutti stiano fallendo.JS o Jquery creano l'ID univoco

Li creazione di oggetti:

$("#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>'); 

sulla funzione click:

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

Questa funzione non fa nulla; recupera il valore di "id" ma non fa nulla con esso. – Pointy

+1

Come si mantiene il codice in questo modo ?! – elclanrs

+0

è corretto, quando guardo nel browser non acquisisce neanche il valore, che presumo sia perché non sa quale li sta inviando la richiesta. Non ho aggiunto altro a causa di questo – atlMapper

risposta

18

Prova in questo modo:

// 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)); 

Occorre avvisare ID casuale del Li al clic. Inoltre, invece di css in linea, aggiungi un'altra classe per quegli stili; meglio, più semplice, più facile.

Demo:http://jsbin.com/avevim/1/edit (Ctrl + Invio per rinfrescare e ottenere nuovi id)

+0

È brillante, funziona perfettamente. qual è la documentazione su come hai costruito gli oggetti li e span in Jquery. Devo assicurarmi di averlo capito per l'uso futuro – atlMapper

+0

@atlMapper: Ecco la documentazione per questo. È il metodo jQuery. http://api.jquery.com/jQuery/ – elclanrs

4

Underscore fornisce una funzione uniqueId per casi come questo. Piuttosto che essere complicato con date e numeri casuali, mantiene semplicemente un contatore globale e lo incrementa ogni volta che viene chiamata la funzione:

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