2009-11-09 2 views
0

Я пишу событие addrow как это ....как остановить Jquery по умолчанию накопительной цикл

$('.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 
}); 

Новых строки просто клонировали включая поле формы, у меня назначить новый идентификатор поля формы, и вы хотите использовать suggestbox в этом новом create formfield. Однако кажется, что он много раз основывается на переменной newRowNum, после нажатия кнопки addrow 3 раза я использую firebug и видел вот это ... Не могли бы вы рассказать мне, как остановить накопительное действие в эта функция? Большое спасибо.

Клетка

<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;"/> 

ответ

0

Не могу понять вам ясно, но вы можете проверить, сколько элементов вы получаете с $('input[id=foods' + newRowNum + ']') каждый клик?

Он похож установить аналогичный идентификатор для каждого input[id^=foods] с этим кодом $newTr.find('input[id^=foods]').attr('id'...

1

Предполагая, что вы имеете в виду, вы беспокоитесь о дублированных дивах, что происходит в том, что когда вы clone(true) копировании всего ряда, в том числе <div class="jsonSuggestResults"> Элемент, который внутри него. Затем вы получаете новый jsonSuggestResults, когда вы создаете новый jsonSuggest, поэтому каждая строка заканчивается еще одним div.

Вы можете удалить div из клона вручную или просто создать целую строку с нуля. Но, вероятно, проще всего было бы взять внедокументный клон div в самом начале скрипта, прежде чем добавлять jsonSuggests и клонировать клон для каждой новой строки, которую вы хотите добавить.

также:

$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'); 

 Смежные вопросы

  • Нет связанных вопросов^_^