JS - 无法读取null的属性值

时间:2016-02-24 11:21:09

标签: javascript html getelementbyid

我正在尝试检查用户是否在HTML表单中实时输入了正确的字符串 这是HTML

  <div class="col-md-2">
    <input class="form-control" name="nbequipement" id="nbequipement" placeholder="" type="text">
    <input type="button" value="Creer le tableau" onclick="GenerateTable()" />
  </div>

这是创建表的javascript:

function GenerateTable()
{
    var edValue = document.getElementById("nbequipement");
    var s = edValue.value;
    var table = document.createElement("table");
    table.className = "table table-condensed table-striped table-bordered" ;
    table.id = "table";
    //CREATION DE L'ENTETE
    var tableHeader = table.insertRow(-1);
    var header1 = document.createElement("TH");
    header1.innerHTML = "Nom d'hote";
    //CREATION DE CHAQUE ROW DU TABLEAU
    for (var i = 1 ; i <= s ; i++) {
        //CREATION DE LA LIGNE
        var row = table.insertRow(-1);
        //CREATION DE CHAQUE CELLULES
        var cell1 = row.insertCell(-1);
        cell1.className = "col-md-1";
        cell1.id='container'+ i +'hostname'+ i + '';
        cell1.innerHTML = '<input class="input-sm" id="hostname' + i + '" placeholder="" type="text" onKeyPress="checkHostname('+cell1.id+', hostname'+i+')" onKeyUp="checkHostname('+cell1.id+', hostname'+i+')">' ;
    }

    var body = document.getElementById("tableSpace");
    body.innerHTML = "";
    body.appendChild(table); 

你可以看到在“cell1”的InnerHTML中,有两个听众:onKeyPress&amp;的onkeydown

当调用函数“checkhostname()”时,我有这个错误:

Uncaught TypeError: Cannot read property 'value' of nullcheckHostname @ template.js:128onkeyup @ templates.php:1

这是功能:

function checkHostname(containerId, elementId) {
    var textContainer = document.getElementById(elementId);
    var texte = textContainer.value;
    //CHECK THE VARIABLE "texte"
    //var lblValue = document.getElementById("lblValue");
}

我不明白为什么会产生这个错误。有些人谈到在编写之前执行的代码,但在这种情况下似乎是不可能的。

2 个答案:

答案 0 :(得分:0)

克里斯蒂的评论是你的回答。你在哪里:

cell1.innerHTML = '<input ... onKeyPress="checkHostname('+cell1.id+', hostname'+i+')" ...>' ;

如果 cell1.id 说“foo”而 i 是0,那么它将被视为标记:

<input ... onKeyPress="checkHostname(foo0, hostname0)" ...>

所以 foo0 hostname0 将被视为变量名,而不是字符串。所以你需要用引号括起来,例如

cell1.innerHTML = '<input ... onKeyPress="checkHostname(\''+cell1.id+'\', \'hostname'+i+'\')" ...>' ;

所以它被视为:

<input ... onKeyPress="checkHostname('foo0', 'hostname0')" ...>'

当然,这仍然依赖于运行代码时文档中存在的那些ID(以及正确的ID)的元素。你说是这样,所以它应该有效。

答案 1 :(得分:-1)

您的元素由于某种原因不存在。但你可以避免错误:

&#13;
&#13;
gzip
&#13;
&#13;
&#13;