如何停止jQuery默认的累积循环

时间:2009-11-09 10:59:07

标签: javascript jquery jquery-selectors

我写了这样的addrow事件......

$('.addRow').click(function(){
var $newTr = $('#tb1 tbody>tr:last').clone(true);
$newTr.insertAfter('#tb1 tbody>tr:last');
newRowNum += 1;
$newTr.find('input[id^=foods]').attr('id', function(){
    var newID = 'foods' + newRowNum ;
    $(this).attr('id',newID).attr('name',newID).attr('class',newID);
});
$('input[id=foods'+ newRowNum +']').jsonSuggest( 
    function(text, wildCard, caseSensitive, notCharacter) { 
        rez = $.ajax({ 
        type: 'GET', 
        url: 'getFoodJSON.jsp',
        data: 'foods=' + text,
        dataType: 'json', 
        async: false 
});
return eval(rez.responseText); 
},
{ ajaxResults:true 
});

刚刚克隆的新行包括一个表单字段,我已经分配了新的表单字段ID,并希望在这个新的创建表单字段中使用suggestbox函数,但是在单击addrow按钮3次之后,似乎基于变量newRowNum多次进行,我使用萤火虫,看到这样......你能不能告诉我如何停止累积这个功能?非常感谢你。

<td height="30">
<input id="foods3" class="foods3" type="text" maxlength="30" size="35" name="foods3" autocomplete="off"/>
<div class="jsonSuggestResults" style="top: 203px; left: 283.55px; width: 232px; display: none;"/>
<div class="jsonSuggestResults" style="top: 203px; left: 283.55px; width: 232px; display: none;"/>
<div class="jsonSuggestResults" style="top: 203px; left: 283.55px; width: 232px; display: none;"/>

2 个答案:

答案 0 :(得分:1)

假设你的意思是你担心重复的div,发生的事情是当你clone(true)复制整行时,包括其中的<div class="jsonSuggestResults">元素。然后在实例化新的jsonSuggest时获得一个新的jsonSuggestResults,因此每行最后会有一个div。

您可以手动从克隆中删除div,或者只是从头创建整行。但最简单的方法是在添加任何jsonSuggests之前在脚本的最开始部分取出div的文档外克隆,并为要添加的每个新行克隆克隆。

此外:

$newTr.find('input[id^=foods]').attr('id', function(){
    var newID = 'foods' + newRowNum ;
    $(this).attr('id',newID).attr('name',newID).attr('class',newID);
});

这很奇怪,可能不是你的意思。当你将函数传递给attr时,它应该依次返回你想要为每个元素设置的attr的值;你不应该改变函数内部的元素。以上相当于更明显的:

var newID= 'foods'+newRowNum;
$newTr.find('input[id^=foods]').attr('id',newID).attr('name',newID).attr('class',newID);

或:

$newTr.find('input[id^=foods]').attr({id: newID, name: newID, 'class': newID});

类似地:

$newTr.insertAfter('#tb1 tbody>tr:last');

为什么不:

$newTr.appendTo('#tb1 tbody');

答案 1 :(得分:0)

无法清楚地了解您,但您可以查看每次点击$('input[id=foods' + newRowNum + ']')获得的项目数量吗?

您似乎使用此代码input[id^=foods]

为每个$newTr.find('input[id^=foods]').attr('id'...设置了相似的ID