我在页面上显示了很多标签。我想对这些值求和并将它们存储在final_cpa
。
HTML:
<label class="tmpcpa">32.1</label>
JS:
function calculate_final_cpa() {
var final_cpa = 0;
var allfilled = false;
$('.tmpcpa').each(function () {
if ($(this).val() != 0) {
final_cpa += parseInt($(this).text()) || 0;
allfilled = true;
} else {
allfilled = false;
}
});
console.log(final_cpa);
console.log(allfilled);
}
var run = setInterval(calculate_final_cpa, 500);
但是final_cpa
始终为0而allfilled
仍为false
。
答案 0 :(得分:3)
因为标签不具有value
属性,因此.val()
函数将始终返回空字符串,您必须使用.text()
来获取内部的文本内容标签元素:
if ($(this).val() != 0) {
应该是:
if ($(this).text() != 0) {
注意:正如下面评论中提到的 Rayon text()
将始终返回string
所以最好将条件中的零更改为字符串{ {1}}。
希望这有帮助。
'0'
&#13;
function calculate_final_cpa() {
var final_cpa = 0;
var allfilled = false;
$('.tmpcpa').each(function () {
if ($(this).text() != '0') {
final_cpa += parseInt($(this).text()) || 0;
allfilled = true;
} else {
allfilled = false;
}
});
console.log(final_cpa);
console.log(allfilled);
}
calculate_final_cpa();
&#13;
答案 1 :(得分:1)
检查$(this).text() != ""
而不是$(this).val() != 0
,因为您无法使用.val()
获取标签文字。 .text(
)会为您提供标签文字
if ($(this).text() != "" && $(this).text() != "0") {
....
}
答案 2 :(得分:0)
首先,您需要使用.text()
代替.val()
来获取标签内的文字。此外,如果您希望结果包含十进制数字,则需要使用parseFloat()
:
function calculate_final_cpa() {
var final_cpa = 0;
var allfilled = false;
$('.tmpcpa').each(function () {
if ($(this).text() != 0) {
final_cpa += parseFloat($(this).text()) || 0;
allfilled = true;
} else {
allfilled = false;
}
});
console.log(final_cpa);
console.log(allfilled);
}
calculate_final_cpa();
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<label class="tmpcpa">32.1</label>
<br />
<label class="tmpcpa">32.1</label>
&#13;
答案 3 :(得分:0)
更改
if ($(this).val() != 0)
到
if (parseInt($(this).text()) != 0)
答案 4 :(得分:0)
除了您的代码有错误之外,您应该在解析之前检查表的内容。并且因为您在示例中使用了小数,所以您也应该从parseInt
切换到parseFloat
。
你的allfilled
varibale毫无意义,因为如果.tmpcpa
的最后一个元素为空,那么它将再次为假。所以我删除了它。
function calculate_final_cpa() {
var final_cpa = 0;
$('.tmpcpa').each(function () {
var content = $(this).text();
final_cpa += IsNumeric(content) ? parseFloat(content) : 0;
});
console.log(final_cpa);
}
答案 5 :(得分:0)
.text
代替val()
进行测试,因为label
没有value
属性Unary plus(+)/Number
运算符代替parseInt
,parseInt
将忽略floating
点length
lable-elements
来测试所有标签是否都有值!== 0
function calculate_final_cpa() {
var final_cpa = 0;
var countOfFilled = 0;
$('.tmpcpa').each(function() {
if ($(this).text() !== '0') {
final_cpa += +($(this).text()) || 0;
++countOfFilled;
}
});
console.log('Total: ' + final_cpa);
console.log('All filled ' + $('.tmpcpa').length === countOfFilled);
}
calculate_final_cpa();
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<label class="tmpcpa">32.1</label>
<label class="tmpcpa">32.1</label>
<label class="tmpcpa">0</label>
&#13;