我正在创建一个内置跨度的li项目。我在span中构建了一个onclick函数来获取父li的ID以传递给JSON get请求。我不确定如何创建一个唯一的ID并在JS函数中读取它。由于这是动态构建的,我没有构建交换机,但我觉得我错过了另一种选择。 这里的问题是我无法捕获李ID。我已经尝试了这个并且也尝试过基于课程,但似乎都失败了。
Li对象创建:
$("#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 :(得分: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 ) );
它应该在点击时提醒li的随机ID。而不是内联css,为这些样式添加另一个类;更好,更简单,更容易。
演示: http://jsbin.com/avevim/1/edit(按住Ctrl键进入刷新并获取新ID)
答案 1 :(得分:4)
Underscore为此类案件提供uniqueId
功能。它不是对日期和随机数很棘手,而是保留一个全局计数器,并在每次调用函数时递增它:
var idCounter = 0;
_.uniqueId = function(prefix) {
var id = '' + ++idCounter;
return prefix ? prefix + id : id;
};