2012-06-13 32 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++' - **是**,那正是我的做法。在我存储这个值之后立即增加它,以保证存储的值是唯一的。 –