2011-11-23 71 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,不可以以數字開頭,所以用一個字母前綴的隨機數(或兩個)。