2012-06-13 31 views
1

我需要一個循環的幫助......它可能很簡單,但我很難編碼它。Javascript/jQuery Id檢查驅動器編號功能與驗證

基本上,我需要檢查現有的ID號碼,以便我可以使用不同的號碼創建唯一的ID。它們的命名方式如下:id =「poly'+ i'」按我的函數順序排列,其中i等於現有元素的數量。例如:Array 1,Array 2,Array 3對應於i = 1用於創建Array 1,i = 2用於Array 2等。

現在我基於現有元素的總數,而我的「CreateNew」函數被關閉x = i + 1(所以上面的例子中,新元素將被命名爲Array 4)。問題是,如果刪除中間數字中的一個,「創建」功能將複製高數字。即陣列1,2,3刪除2,創建新的 - >陣列1,3,3.

我需要一個if()語句來檢查數組是否已經存在然後for()循環遍歷所有我的直到它證實。不知道如何編碼。

我試圖糾正代碼如下(注意:我最初沒有寫這篇文章,我只是想用我的最小JS技能加以糾正):

function NewPanel() { 


    var i = numberOfPanels.toString(); 
    var x = (parseInt(i)+1).toString(); 


    $('#items').append('<div onclick="polygonNameSelected(event)" class="polygonName" id="poly'+i+'">&nbsp;&nbsp;Array '+ x +' &nbsp;&nbsp;&nbsp;&nbsp;<a href="javascript:void(0)" onclick="removePolygon('+i+');return false;">&nbsp;&nbsp;&nbsp;</a></div>'); 
    $('div[id*=poly]').removeClass('selected'); 
    $('#poly'+i).addClass('selected'); 
    $('#poly'+i).click(function() { 
    selectedPolygon = i; 
    $('div[id*=poly]').removeClass('selected'); 
    $(this).addClass('selected'); 
    }); 

} 

THANK YOU! :)

回答

0

請澄清「問題是,如果您刪除中間數字之一,」。刪除是什麼意思?無論如何,最簡單的解決方案是創建兩個數組。這兩個數組都將具有相同的創建ID。每當在第一個數組中創建一個id,一個id將被添加到第二個數組中。因此,當它從第一個數組中刪除時,請檢查第二個數組的最高值,然後在第一個數組中創建此ID。我希望這不會讓你感到困惑。

+0

UI上有一個單獨的功能,允許用戶「刪除」陣列。你的解決方案是有道理的,除了例如當你有[1,2,3,4,5]的數組1和2的情況,並且從數組1中刪除除1之外的所有數據。你只需要創建一個帶有值的標識= 2,從而導致相同的id重複問題。 –

+0

因爲它是一個簡單的修復程序,所以會進行測試。 –

0

那麼很難說出爲什麼你不能拼接陣列。在我看來,跟蹤元素數量涉及很多額外的邏輯。換句話說,除了索引相同之外,由於重疊1,3,3(來自示例),因此id變得與其他屬性一樣。如果情況並非如此,那麼我的假設是不正確的。

基於這個假設,當我遇到一種情況時,我想確保創建的索引總是附加的,我通常採用與數據庫主鍵相同的方法。我設置了一個現場:

var primaryKeyAutoInc = 0; 

而且每次我「創造」或元素添加到數據存儲(在這種情況下,數組)的時間我複製鍵的當前價值,因爲它的索引,然後遞增值爲primaryKeyAutoInc。這允許我假設你正在尋找的保證唯一索引。而且,不僅刪除不會影響將來的數據創建,保存的密鑰索引可以用作訪問者。

+0

假設ids變得一樣,你是正確的。我對「關鍵」術語不熟悉,並且難以想象如何實現您的解決方案。另外一個約束是我對i = 4的索引是有限的,(i = 0 - i = 4對應於每個x變量的數組1-5)。 –

+0

對不起,我明顯缺乏編程知識!試圖學習:)在增加變量方面,你只需要primaryKeyAutoInC++? –

+0

@JohnMitman - 如果僅限於5個,那麼可能需要交換實現。我想這將取決於你是否可以只有總數5,或總共5活躍。至於'primaryKeyAutoInC++' - **是**,那正是我的做法。在我存儲這個值之後立即增加它,以保證存儲的值是唯一的。 –