2012-02-16 87 views
0

Jquery的事件我有这样的脚本,在KEYUP产生50“一个”标签:“刷新”上KEYUP

$("#searchbox").live("keyup",function(){ 
    var count = 50; 
    var aElements = ""; 

    for (var i = 0; i < count; i++) { 
     aElements += "<a href=\"#\">" + i + "</a>"; 
    } 

    $("#page").append(aElements); 
}); 

的问题是每个KEYUP该金额的广告了。因此,不是针对特定数量的50个事件触发事件,而是将代码广告添加到计数中所以对于每个'keyup'我都会得到50 + 50 + 50'a'标签等等。所以当我输入'stackoverflow'时,我得到了650'a'标签:)而不是50.那么我该怎么做?请记住,这个数字实际上是一个每次都会改变的var,所以添加事件.one()将不起作用。

+0

谢谢你们,我会注意到它,但它会需要一段时间才能看到我的剧本什么工作,请有关验收耐心.. – Youss 2012-02-16 20:21:34

+0

S(KEYUP) - > 50 ** A **标签+ a(键盘) - > 50 ** a **标签+ ...自然会是13x50 = 650 ** a **标签。你真正愿意做什么? – inhan 2012-02-16 20:21:43

回答

1

不要使用.append(),正如它的名字说,增加了新的元素,但不会删除以前的。在#page的末尾添加一个容器,并使用.html(),以便删除旧内容。

1

我不是100%肯定我明白你的要求,但我相信这是你在找什么:

选项1

$("#page").html(""); //Clear HTML from #page 

选项2

$("#page a").remove(); //Clear only the anchor tags from #page 

选项3

只需使用.html()取代.append()。除非你有特定的理由使用.append(),否则这是最好的选择。

$("#page").html(aElements); 

这里是a working fiddle

1

如果我正确理解你,每次数字会改变(可以更大或更小),你需要更新它以使a标签的数量等于该数字。

我认为最好的选择将是看到已经存在多少和采取相应的行动(除非总数保持很小,在这种情况下,只需擦拭干净,然后重新创建每次)。要做到这一点,我将共享类添加到每个a标签:

aElements += "<a href=\"#\" class=\"number\">" + i + "</a>"; 

,然后执行以下,看看有多少已经存在:

var existing = $(".number").length 

然后,如果数量少不是我要多少有:

for (var i = existing; i < count; i++) { 
    // add more 

而如果是更,请执行下列操作以去除多余的:

$(".number").gt(count).remove();