2013-05-09 5 views
0

Ok, так как этот вопрос не ясно, я обновил его, как показано ниже:JQuery: Получение значений из текстовых полей, созданных асинхронно?

Я загрузив CSV файл на сервер, он анализирует файл CSV и получить значение столбца Amount, а затем подготавливает HTML, содержащий текстовые поля с суммой. Этот html сгенерированный затем передается в javascript, который выводит полный html содержащий текстовые поля со значениями.

код сервера, который возвращает HTML через Ajax вызова:

foreach($amounts as $val){ 
    $html .+ '<input type="text" class="inputText" value="'.$val['amount'].'"/>'; 
} 
echo $html; 

Jquery код, который выводит HTML (внутри generateHtml() функции):

$('#amtblock').html(html); 

HTML, что приводит к:

<div id="amtblock"> 
    <input type="text" class="inputText" value="3"/> 
<input type="text" class="inputText" value="78"/> 
<input type="text" class="inputText" value="12"/> 
<input type="text" class="inputText" value="21"/> 
<input type="text" class="inputText" value="89"/> 
<input type="text" class="inputText" value="22"/> 
<input type="text" class="inputText" value="222"/> 
</div> 

Теперь, когда я пытаюсь получить все значения текстового поля с помощью этого кода (внутри calculateAmount() функция):

$('.inputText').each(function() { 
    total += Number($(this).val());  
}); 

total не печатается в коде выше. Я хочу рассчитать общее количество и показать его. Как я могу получить и установить значения для элементов, которые я создал динамически?

+1

Когда и как вы создаете текстовые поля? –

+1

Вам нужно больше узнать о своем коде. –

+2

Если они "не зарегистрированы в DOM", где они? Вы пытаетесь сказать, что они не являются частью исходного html, но они добавляются динамически? – nnnnnn

ответ

1

При создании элементов с вызова AJAX, помните что они создаются асинхронно. Это означает, что функции, запускаемые после вызова AJAX, будут запущены до завершения вызова AJAX.

Чтобы учесть элементы DOM, созданные из вызова AJAX, вам нужно подождать, пока вызов будет завершен.

В вашем случае вы должны убедиться, что ваша функция calculateAmount() запускается после создания ваших входов. Вы можете сделать это, поставив calculateAmount() внутри функции generateHtml() после $('#amtblock').html(html);.

0

жаль редактирования, я не видел весь код еще, это должно работать для вас

total=0; 
$(document).ready(function(){ 
    total=0; 
    $('.inputText').each(function() { 
     val_to_add=$(this).val() || 0 
     total += parseInt(val_to_add);  
     console.log(total); 
    }); 
}); 

Примерить jsfiddle: http://jsfiddle.net/Ugwx5/2/

+0

Зачем ему нужно создавать div? Что такое событие 'input'? –

+0

ничего, что я просто не использовал console.log. Я помещаю итог в div, я заменю последнюю строку. – CodeBird

+0

Но это добавляет к сумме только значение от элемента, к которому применяется событие, и если это событие произошло несколько раз подряд для одного и того же элемента, каждое новое значение будет добавлено в - по сравнению с кодом OP, который пытался выполнить цикл над предметами один раз. – nnnnnn

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