基本上我有一个PHP方法,可以从服务器上的数据库下载表(phone_table)。这一切都很好。当它打印表格时,最后一列只是一个复选框,并通过php:使用此代码打印
echo "<td><input type='checkbox' id=$i onlick=getSubtotal($i)" . $a[$j+1] . "</td>";
这是JavaScript中的getSubtotal(a)方法,包括调试警报:
function getSubtotal(a) {
alert("called");
var table_ph = document.getElementById("phone_table");
var cellNo = table_ph.rows.item(a).cells;
var cellVal = document.getElementById(a);
alert("localStorage = " + localstorage.ttl);
alert("Called");
if(cellVal.checked == 1){
cellVal = cellNo.item('5').textContent;
var sub = parseFloat(localstorage.ttl);
var num = parseFloat(cellVal);
alert("Checked");
sub = sub + num;
localstorage.ttl = sub;
document.getElementById("subtotal").innerHTML= "Your Subtotal is: £" + localstorage.ttl;
alert(localstorage.ttl);
} if(cellVal.checked == 0){
cellVal = cellNo.item('5').textContent;
var sub = parseFloat(localstorage.ttl);
var num = parseFloat(cellVal);
sub = sub - num;
localstorage.ttl = sub;
document.getElementById('subtotal').innerHTML= "Your Subtotal is: £" + localstorage.ttl;
}
}
任何帮助都是非常棒的,因为这会让我分心。干杯伙计们,
首先,您可以更改
if(cellVal.checked == 1) {
// ...
}
if(cellVal.checked == 0) {
// ...
}
至
if(cellVal.checked) {
// ...
} else {
// ...
}
两个块还共享许多行(它们是重复的),所以您可以将它们放在if
语句之前/之后。此外,这一行不正确:
cellVal = cellNo.item('1').textContent;
CCD_ 2是对DOM元素的引用。所以改变它的价值是由完成的
cellVal.value = cellNo.item('1').textContent;
接下来就是id
属性无效(它们不能只是一个数字)。
然而,有太多的逻辑似乎不合适或完全错误,如果不知道这个代码应该做什么,我就无法真正改进
localstorage
在那里干什么?这个名字暗示了与HTML5localStorage
的相似之处,但它在这里没有任何作用- 你为什么用这么多方法处理
a
?为什么它既是索引又是id?一旦你使用了有效的id,这将不再有效 - 假设您想将检查的值相加,我看不出
sub - num
有什么用处
最后,如前所述,您应该了解"关注点分离"。不要将HTML与Javascript混合使用。
编辑:对你想要实现的目标进行疯狂的猜测,这就是我的想法:Fiddle
(注意:由于Array.prototype.forEach
和document.querySelectorAll
的使用,我的fiddle只适用于IE9+。不过,这些可以填充,或者你当然也可以使用其他选项——但由于我只是想猜测一下,所以我不在乎浏览器兼容性)
您的输入框中缺少右括号,属性值周围也缺少一些单引号。您有:
echo "<td><input type='checkbox' id=$i onlick=getSubtotal($i)" . $a[$j+1] . "</td>";
这样做,看看它是否解决了问题:
echo "<td><input type='checkbox' id='$i' onclick='getSubtotal($i)' />" . $a[$j+1] . "</td>";
更新:至于您的javascript,请确保将(a-1)
传递给rows.item集合,因为javascript使用基于0的计数!此外,您还对cellNo.item('5')
进行了硬编码——如果您想要第5个单元格,请确保将其更改为cellNo.item('4')
:
function getSubtotal(a) {
var table_ph = document.getElementById("phone_table");
var cellNo = table_ph.rows.item(a-1).cells;
var cellVal = document.getElementById(a);
if(cellVal.checked == 1){
cellVal = cellNo.item('5').textContent;
var sub = parseFloat(localstorage.ttl);
var num = parseFloat(cellVal);
sub = sub + num;
localstorage.ttl = sub;
document.getElementById("subtotal").innerHTML= "Your Subtotal is: £" + localstorage.ttl;
}
if(cellVal.checked == 0){
cellVal = cellNo.item('5').textContent;
var sub = parseFloat(localstorage.ttl);
var num = parseFloat(cellVal);
sub = sub - num;
localstorage.ttl = sub;
document.getElementById('subtotal').innerHTML= "Your Subtotal is: £" + localstorage.ttl;
}
}
更新#2:这里有一个正在工作的JSFIDDLE,它与您的代码不100%匹配,但应该向您展示它的工作原理:
http://jsfiddle.net/GvkN2/