(JavaScript)试图通过复选框调用方法


(JavaScript) Trying to call a Method throught a CheckBox

基本上我有一个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: &#163;" + 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: &#163;" + 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.forEachdocument.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: &#163;" + 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: &#163;" + localstorage.ttl;
    }
}

更新#2:这里有一个正在工作的JSFIDDLE,它与您的代码不100%匹配,但应该向您展示它的工作原理:

http://jsfiddle.net/GvkN2/