2011-11-23 70 views
0

说我有这个样机代码:如何避免ID-冲突时,对即时产生元件

button.click(function(){generateForm();} 

    function generateForm(){ 
    div.append(<input type='text' id='x'>); 
    } 

我需要的ID,以分别访问的元素。

避免在这种情况下发生ID冲突的最佳方法是什么?

+1

根本不使用ID? – vzwick

+0

这取决于你在做什么。在服务器端生成标识可能是最有意义的。 – Marcin

+0

我会更新有关场景的更多信息。 –

回答

2

它更好地使用class来代替。但是,如果你仍然愿意使用id,您可以考虑使用一个计数器是这样的:

var idCounter = 1; 
    function generateForm(){ 
    div.append("<input type='text' id='x-" + (idCounter++) + "'>"); 
    } 
+0

感谢您的回复。你能否详细说明在这种情况下如何使用类? –

+0

你的问题仍然不清楚。你能告诉我你想对这些文本字段做什么吗? –

2

如果你确实需要,你可以使用当前的时间戳的ID。

这显然不会产生重复的ID,除非您每毫秒多次调用该函数或者您的用户经常在时间间隔中卡住。

function generateForm(){ 
    d = new Date(); 
    div.append('<input type="text" id="unique-id-' + d.getTime() + '" >); 
} 

编辑:注意unique-id-前缀,ID应该只能是数字。

1

如果您不希望跟踪外部计数器,请尝试:

function makeAVeryRandomId() { 
    var d = new Date(), 
     a = ["0","1","2","3","4","5","6","7","8","9"], 
     i = 10, 
     m = ''; 

    while (i--) { 
     m += a[Math.floor(Math.random() * a.length)]; 
    }; 

    return d.getTime() + m; 
    }; 

记住,ID,不可以以数字开头,所以用一个字母前缀的随机数(或两个)。