JavaScript getElementById空值错误及其避免方法

JavaScript getElementById空值错误及其避免方法,javascript,php,html,dom,Javascript,Php,Html,Dom,我创建了一个表单,用户可以在其中输入可以添加到页面中的最小和最大文本区域数。它生成下面的代码,以便使用JScript获取它: $minimum .= '<div id="K'.$i.'">'.$min[$i].'</div>'; $maximum .= '<div id="H'.$i.'">'.$max[$i].'</div>'; 这不管用。它仍然会出错。更简单的解决方案是将这些元素赋予相同的类,然后只选择具有该类的所有元素。我不明白为什么每个元

我创建了一个表单,用户可以在其中输入可以添加到页面中的最小和最大文本区域数。它生成下面的代码,以便使用JScript获取它:

$minimum .= '<div id="K'.$i.'">'.$min[$i].'</div>';
$maximum .= '<div id="H'.$i.'">'.$max[$i].'</div>';

这不管用。它仍然会出错。

更简单的解决方案是将这些元素赋予相同的类,然后只选择具有该类的所有元素。我不明白为什么每个元素都必须有自己的ID

$minimum .= '<div class="K">'.$min[$i].'</div>';
$maximum .= '<div class="H">'.$max[$i].'</div>';

然后您甚至不知道如何触摸DOM。

更简单的解决方案是为这些元素提供相同的类,然后只选择具有该类的所有元素。我不明白为什么每个元素都必须有自己的ID

$minimum .= '<div class="K">'.$min[$i].'</div>';
$maximum .= '<div class="H">'.$max[$i].'</div>';

然后您甚至不知道如何接触DOM。

首选解决方案是在给定类型的每个元素上放置一个公共类,并查询实际存在的元素:

$minimum .= '<div class="K" id="K'.$i.'">'.$min[$i].'</div>';
$maximum .= '<div class="H" id="H'.$i.'">'.$max[$i].'</div>';

var mincount = [];
var maxcount = [];
var kItems = document.querySelectorAll(".K");
var hItems = document.querySelectorAll(".H");
for (var i = 0, len = Math.min(kItems.length, hItems.length); i < len; i++) {
    mincount[i] = parseInt(kItems[i].innerHTML, 10);
    maxcount[i] = parseInt(hItems[i].innerHTML, 10);

}

首选的解决方案是在给定类型的每个元素上放置一个公共类,并查询实际存在的元素:

$minimum .= '<div class="K" id="K'.$i.'">'.$min[$i].'</div>';
$maximum .= '<div class="H" id="H'.$i.'">'.$max[$i].'</div>';

var mincount = [];
var maxcount = [];
var kItems = document.querySelectorAll(".K");
var hItems = document.querySelectorAll(".H");
for (var i = 0, len = Math.min(kItems.length, hItems.length); i < len; i++) {
    mincount[i] = parseInt(kItems[i].innerHTML, 10);
    maxcount[i] = parseInt(hItems[i].innerHTML, 10);

}

测试空值的最简单方法是简单的相等性检查

...
...
for(var k=1; k<101; k++) {
    var K_el = document.getElementById("K"+k);
    var H_el = document.getElementById("H"+k);
    if ( K_el != null && H_el != null ) {
        mincount[k] = parseInt(K_el.innerHTML, 10);
        maxcount[k] = parseInt(H_el.innerHTML, 10);
    }
}

除非用户可以修改这些值,否则在PHP中计算最小值和最大值会更容易。

测试空值的最简单方法是简单的等式检查

...
...
for(var k=1; k<101; k++) {
    var K_el = document.getElementById("K"+k);
    var H_el = document.getElementById("H"+k);
    if ( K_el != null && H_el != null ) {
        mincount[k] = parseInt(K_el.innerHTML, 10);
        maxcount[k] = parseInt(H_el.innerHTML, 10);
    }
}

除非用户可以修改这些值,否则在PHP中计算最小值和最大值会更容易。

更容易的解决方案是将这些元素赋予相同的类,然后只选择具有该类的所有元素。我不明白为什么每个元素都必须有自己的ID。。。。或者直接将PHP$min和$max数组输出到一个数据属性,甚至是一个javascript变量。我认为这个类不应该解决我的问题:它还使用了name属性。document.getElementsByName将返回一个数组,从上到下按DOM顺序排列。问题是当例如$min为3时。我有一个循环,它将运行3次,例如,如果数组中的第二个索引没有定义,因为不是所有的索引都用这个代码填充,那么我再次得到null:更简单的解决方案是给这些元素赋予相同的类,然后只选择具有该类的所有元素。我不明白为什么每个元素都必须有自己的ID。。。。或者直接将PHP$min和$max数组输出到一个数据属性,甚至是一个javascript变量。我认为这个类不应该解决我的问题:它还使用了name属性。document.getElementsByName将返回一个数组,从上到下按DOM顺序排列。问题是当例如$min为3时。然后,我有一个循环,它将运行3次,例如,如果数组中的第二个索引没有定义,因为不是所有索引都用此代码填充,我再次得到null:
var mincount = [];
var maxcount = [];
var objK, objH;
for(var k=1; k<101; k++) {
    objK = document.getElementById("K"+k);
    objH = document.getElementById("H"+k);
    if (objK) {
        mincount[k] = parseInt(objK.innerHTML, 10);
    }
    if (objH) {
        maxcount[k] = parseInt(objH.innerHTML, 10);
    }
}
var mincount = [];
var maxcount = [];
var objK, objH;
for(var k=1; k<101; k++) {
    objK = document.getElementById("K"+k);
    objH = document.getElementById("H"+k);
    if (!objK || !objH) {
        break;
    }
    mincount[k] = parseInt(objK.innerHTML, 10);
    maxcount[k] = parseInt(objH.innerHTML, 10);
}
...
...
for(var k=1; k<101; k++) {
    var K_el = document.getElementById("K"+k);
    var H_el = document.getElementById("H"+k);
    if ( K_el != null && H_el != null ) {
        mincount[k] = parseInt(K_el.innerHTML, 10);
        maxcount[k] = parseInt(H_el.innerHTML, 10);
    }
}