JavaScript:无法读取属性'值'从文本框中的null

时间:2018-01-22 16:03:12

标签: javascript



function create(param) {

    var i, target = document.getElementById('results');
    target.innerHTML = '';

    for(i = 1; i <= param; i += 1) {
	target.innerHTML +='<br>'
	 for(var j=1;j<=param;j+=1)
        target.innerHTML += '<input type="text" id="a'+i+''+j+'" placeholder="a'+i+''+j+'">';
    }
}
function saveData(param) {
 var a = []
 for(var i = 1;i<param;i+=1) {
 a[i] = [];
 for(var j = 1;j<param;j+=1)
  a[i][j] = document.getElementById('"a'+i+''+j+'"').value;
  }
  var target = document.getElementById('ShowResults');
  for(var i = 1;i<param;i+=1){
  a[i] = [];
  target.innerHTML +='<br>'
  for(var j = 1;j<param;j+=1)
  target.innerHTML +=a[i][j];
  }
}
&#13;
<button onclick="create(5)" style="widht:300px;height:30px;">Create table</button>

<div id="results"> </div>

<button id="takeResults" onclick="saveData(5)"style="widht:300px;height:30px;">Save data</button>

<div id="ShowResults"> </div>
&#13;
&#13;
&#13;

好吧所以我制作了一个表格,并给出了 "a'+i+''+j+'" 的每个文本框ID,但似乎当我想保存它显示的数据时,我发现以下错误:无法读取属性&#39 ;值&#39;为null

你能告诉我我做错了什么吗?

2 个答案:

答案 0 :(得分:0)

改变这个......

a[i][j] = document.getElementById('"a'+i+''+j+'"').value;

到此......

a[i][j] = document.getElementById('a' + i + j).value;

您在创建ID时会在ID周围添加两个引号,但是当您使用getElementById时,不需要同时添加它们。只需构建字符串即可。

您的代码还存在其他一些问题,主要是您没有开口括号,但是您有大括号。复制/粘贴此内容,它应该可以解决您的问题......

function create(param) {
    var i, target = document.getElementById('results');
    target.innerHTML = '';
    for(i = 1; i <= param; i += 1) {
    target.innerHTML +='<br>'
    for(var j=1;j<=param;j+=1) {
        target.innerHTML += '<input type="text" id="a'+i+''+j+'" placeholder="a'+i+''+j+'">';
    }
}

function saveData(param) {
    var a = []
    for(var i = 1;i<param;i+=1) {
        a[i] = [];
        for(var j = 1;j<param;j+=1) {
            a[i][j] = document.getElementById('a' + i + j).value;
        }
        var target = document.getElementById('ShowResults');
        for(var i = 1;i<param;i+=1) {
            a[i] = [];
            target.innerHTML +='<br>'
            for(var j = 1;j<param;j+=1) {
                target.innerHTML +=a[i][j];
            }
        }
    }
}

顺便说一句,使用多层数组可能会导致问题,主要是因为对读者(或将来)不友好。我强烈建议您使用一组对象,并将事件命名为ai&amp; j

答案 1 :(得分:0)

这里是一些代码改进的解决方案 正如我在评论中所说,您getElementById('"a' + i + '' + j + '"')应该是getElementById('a' + i + '' + j)的代码中存在错误 并且有很多不必要的循环

&#13;
&#13;
function create(param) {

  var target = document.getElementById('results');
  target.innerHTML = '';

  for (var i = 0; i < param; i++) {
    target.innerHTML += '<br>'
    for (var j = 0; j < param; j++)
      target.innerHTML += '<input type="text" id="a' + i + '' + j + '" placeholder="a' + i + '' + j + '">';
  }
}

function saveData(param) {
  var target = document.getElementById('ShowResults');
  target.innerHTML = '';
  var a = []
  for (var i = 0; i < param; i++) {
    a[i] = [];
    for (var j = 0; j < param; j++) {
      target.innerHTML += document.getElementById('a' + i + '' + j).value;
    }
    target.innerHTML += '<br>'
  }
}
&#13;
<button onclick="create(5)" style="widht:300px;height:30px;">Create table</button>

<div id="results"> </div>

<button id="takeResults" onclick="saveData(5)" style="widht:300px;height:30px;">Save data</button>

<div id="ShowResults"> </div>
&#13;
&#13;
&#13;