как остановить jQuery по умолчанию накопительный цикл - PullRequest
0 голосов
/ 09 ноября 2009

Я написал событие 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 
});

Только что клонированы новые строки, включая поле формы, я назначил новый идентификатор поля формы и хочу использовать функцию предлагать в этом новом поле создания формы. Однако кажется, что это происходит много раз на основе переменной newRowNum, после нажатия кнопки добавления 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;"/>

Ответы [ 2 ]

1 голос
/ 09 ноября 2009

Если вы имеете в виду, что беспокоитесь о дублированных элементах div, то происходит следующее: когда вы 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, она должна возвращать значение атрибута, которое вы хотите установить для каждого элемента по очереди; вы не должны изменять элемент внутри функции. Вышеуказанное эквивалентно более очевидному:

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');
0 голосов
/ 09 ноября 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...