Javascript Jquery:从异步创建的文本框中获取值?
好的,因为问题不清楚,我更新如下: 我正在上传一个CSV文件到服务器,它解析CSV并获取Amount列的值,然后准备一个包含带有Amount的文本框的html。然后将生成的html传递给javascript,javascript输出包含带有值的文本框的完整html 通过ajax调用返回html的服务器代码:Javascript Jquery:从异步创建的文本框中获取值?,javascript,jquery,Javascript,Jquery,好的,因为问题不清楚,我更新如下: 我正在上传一个CSV文件到服务器,它解析CSV并获取Amount列的值,然后准备一个包含带有Amount的文本框的html。然后将生成的html传递给javascript,javascript输出包含带有值的文本框的完整html 通过ajax调用返回html的服务器代码: foreach($amounts as $val){ $html .+ '<input type="text" class="inputText" value="'.$val
foreach($amounts as $val){
$html .+ '<input type="text" class="inputText" value="'.$val['amount'].'"/>';
}
echo $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>
总计
未以上述代码打印。我想计算总数并显示出来。
如何获取和设置动态创建的元素的值 很抱歉编辑,我还没有看到所有的代码,这应该适合您
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上试试:当您使用AJAX调用创建元素时,请记住它们是异步创建的。这意味着在AJAX调用之后启动的函数将在AJAX调用完成之前启动 为了考虑从AJAX调用创建的DOM元素,您必须等待调用完成
在您的情况下,需要确保在创建输入后启动
calculateAmount()
函数。您可以通过将calculateAmount()
放在generateHtml()
函数的$('#amtblock').html(html)之后来实现这一点代码>何时以及如何生成文本框?需要查看更多代码。如果它们“未在DOM中注册”,它们在哪里?您是否试图说它们不是原始html的一部分,但它们是动态添加的?另外,您是否在循环之前声明total
?如果不是这样,当您试图说total+=…
(这个问题与所讨论的元素是否是动态添加的无关)时,您的代码将因引用错误而崩溃。@VishwaKumar,可能存在两个问题:(1)您的总计函数出现在html插入函数之前,或者(2)您没有声明var total=0代码>。我想不出还有什么可能。他为什么要创建一个div?什么是input
事件?没有什么我只是没有使用console.log我将总数放入一个div中,我将替换最后一行。但是这只将事件应用到的元素的值添加到总数中,如果该事件在同一个元素的一行中发生多次,每个新值都会被添加进去——与OP的代码相比,OP的代码试图循环一次项。我还没有听说过“输入”事件。想不想提供一些文件证明这是可行的?@DerekHenderson-这是真的,但对OP的问题没有帮助。还有,CodeBird,为什么要引入parseInt()
?它的作用与Number()
不同(在用户输入的数据上使用parseInt()
时,确实应该在第二个参数中指定基数)。
$('.inputText').each(function() {
total += Number($(this).val());
});
total=0;
$(document).ready(function(){
total=0;
$('.inputText').each(function() {
val_to_add=$(this).val() || 0
total += parseInt(val_to_add);
console.log(total);
});
});