2017-01-07 43 views
-4

我已经来了两次了以下功能:如何在重复函数上生成唯一标识符?

function (data) { 
    $.each(data.items, function(i,item) {  
        var $items = $('<div class="col-sm-4 grid-item"><div class="thumbnail"><input type="checkbox" name="thing_'+i+'" value="valuable" id="thing_'+i+'"/><label for="thing_'+i+'"><img class="img-responsive" src="' + item.link + '"></label></div></div>');`enter code here` 

它产生的复选框,我产生了标识nameforidi,给我:

thing_1 
thing_2 
thing_3 

的问题是,当我第二次运行该功能,i再次启动,导致重复idsnamefor

+1

打破了你巨大的HTML一团糟乘行难道他们每个需要有唯一的标识符?在大多数情况下,这是一种反模式。一个更好的选择是为所有元素提供相同的结构,并使用DOM遍历来根据需要查找相关元素。 –

+0

很好啊,他们都应该有,因为他们复选框 –

+0

那也没理由单独需要一个唯一的标识符 –

回答

1

使用IIFE

var uniqueId = (function() { 
    var counter = 0; 

    return function(prefix) { 
    counter++; 
    return prefix ? prefix + '' + counter : counter; 
    } 
})(); 

console.log(uniqueId()); // 1 
console.log(uniqueId()); // 2 
console.log(uniqueId('thing_')); // thing_3 
console.log(uniqueId('thing_')); // thing_4 

你会在你的代码将它集成这样的:

function (data) { 
    $.each(data.items, function(i, item) { 
    var uniq = uniqueId('thing_'); 
    var $items = $('<div class="col-sm-4 grid-item">'.concat(
     '<div class="thumbnail">', 
     '<input type="checkbox" name="', uniq, '" value="valuable" id="', uniq, '" />', 
     '<label for="', uniq, '">', 
     '<img class="img-responsive" src="' + item.link + '">', 
     '</label>', 
    '</div>', 
    '</div>')); 

我使用String.prototype.concat

+0

你能否详细说明它以反映问题中的代码? –

相关问题