Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 问题动态生成表_Javascript_Jquery_Addeventlistener - Fatal编程技术网

Javascript 问题动态生成表

Javascript 问题动态生成表,javascript,jquery,addeventlistener,Javascript,Jquery,Addeventlistener,我正在使用jquery创建一个表,其中tile的ID是使用嵌套的FOR循环生成的。我正在尝试使用它们的ID将和事件侦听器添加到分幅中,以便在单击它们时可以运行一个函数。但是,无法识别存储在变量boatStatusClient中的id,并引发错误。有人看到问题了吗 for (y_client = 1; y_client < 11; y_client++) { battlefield_client += "<tr>"; for (x_client = 1; x_cl

我正在使用jquery创建一个表,其中tile的ID是使用嵌套的FOR循环生成的。我正在尝试使用它们的ID将和事件侦听器添加到分幅中,以便在单击它们时可以运行一个函数。但是,无法识别存储在变量boatStatusClient中的id,并引发错误。有人看到问题了吗

for (y_client = 1; y_client < 11; y_client++) {
    battlefield_client += "<tr>";
    for (x_client = 1; x_client < 11; x_client++) {
        battlefield_client += "<td onclick = '' class = 'tile' style='border: 3px solid black;' id=" + "cell_client_" + x_client + "_" + y_client + "><pre>     </pre></td>";
        boatStatusClient = document.getElementById('cell_client_' + x_client + "_" + y_client);
        console.log(boatStatusClient);
        boatStatusClient.addEventListener("click", function(){boatGrid.placeBoat_client()});
    }
    battlefield_client += "</tr>";
}
$(document).ready(function() {
    $("#tableGrid_client").html(battlefield_client); //loads table
battlefield_client += "<td onclick = '' class = 'tile' style='border: 3px solid black;' id=" + "cell_client_" + x_client + "_" + y_client + "><pre>     </pre></td>";
for(y_客户端=1;y_客户端<11;y_客户端++){
战场_客户端+=“”;
对于(x_客户端=1;x_客户端<11;x_客户端++){
战场_客户端+=“”;
boatStatusClient=document.getElementById('cell\u client\uu'+x\u client+“\uu”+y\u client);
控制台日志(boatStatusClient);
boatStatusClient.addEventListener(“单击”,函数(){boatGrid.placeBoat_client()});
}
战场_客户端+=“”;
}
$(文档).ready(函数(){
$(“#tableGrid_client”).html(战地_client);//加载表

看起来您正在尝试查找DOM中不存在的document.getElementById()元素

首先将其附加到页面,然后搜索并添加相关的事件列表


但是,您确实应该考虑使用document.createElement(或jQuery对象)而不是concating字符串。有关更深入的讨论,请参阅。

看起来您正在尝试查找DOM中不存在的document.getElementById()元素

首先将其附加到页面,然后搜索并添加相关的事件列表


但是,您应该真正考虑使用document.createElement(或jQuery对象)而不是concating字符串。有关更深入的讨论,请参阅。

看,您的事件函数是在创建DOM元素之前执行的

试试这个:

for(y_客户端=1;y_客户端<11;y_客户端++){
战场_客户端+=“”;
对于(x_客户端=1;x_客户端<11;x_客户端++){
战场_客户端+=“”;
}
战场_客户端+=“”;
}
$(文档).ready(函数(){
$(“#tableGrid_client”).html(战地_client);//加载表
$('.tile')。单击(函数(){
boatGrid.placeBoat_client();
});
});

看,在创建DOM元素之前,您的事件函数正在执行

试试这个:

for(y_客户端=1;y_客户端<11;y_客户端++){
战场_客户端+=“”;
对于(x_客户端=1;x_客户端<11;x_客户端++){
战场_客户端+=“”;
}
战场_客户端+=“”;
}
$(文档).ready(函数(){
$(“#tableGrid_client”).html(战地_client);//加载表
$('.tile')。单击(函数(){
boatGrid.placeBoat_client();
});
});

正如fistuks已经提到的那样,您试图访问一个尚不在DOM中的元素,因此无法获取它

通过这样做:

战场_客户端+=”;
您只创建了一个包含该元素的字符串,但从未将其插入dom中——至少在尝试获取实际元素之前是这样

因此,您要做的是:将此字符串附加到视图/dom:-) 那么,你应该能够得到它与你的上述方法


此外,我会考虑更好地引用引文,而不是混合使用单引号和双引号。我的建议是在编写JavaScript时总是使用单引号,而在编写HTML时使用双引号。

作为已经提到的FiSTOK,你试图达到一个尚未在DOM中的元素,因此你不能得到它。/p> 通过这样做:

战场_客户端+=”;
您只创建了一个包含该元素的字符串,但从未将其插入dom中——至少在尝试获取实际元素之前是这样

因此,您要做的是:将此字符串附加到视图/dom:-) 那么,你应该能够得到它与你的上述方法


此外,我会考虑更好地引用引文,而不是混合使用单引号和双引号。我的建议是在编写JavaScript时总是使用单引号,在编写HTML时使用双引号。< /P>在剪切中添加整个代码,这样我们就可以看到错误是什么。因为在代码中我可以看到多个问题。<代码> DEC。concat之前的lare变量

无法将listner添加到null元素
我们需要查看document.getElementById('cell\u client\u'+x\u client+“\u'+y\u client)中的内容输出。如果为空,则无法添加事件侦听器。为什么半纯JS,半jQuery?在snipped中添加整个代码,以便我们可以看到错误是什么?因为我可以看到代码中存在多个问题。
在concat之前声明变量。
无法将listner添加到空元素
我们需要查看
document.getElementById('cell_client_u'+x_client+“u”+y_client)
outputs。如果为null,则无法添加事件侦听器。为什么是半纯JS,半jQuery?谢谢,这已经解决了问题problem@MaximWebb如果答案解决了您的问题,请将其标记为解决方案,以便其他人也能得到帮助!谢谢,这已经解决了问题problem@MaximWebb如果答案解决了你的问题,请将其标记为解决方案哦,其他人也得到了帮助!
battlefield_client += "<td onclick = '' class = 'tile' style='border: 3px solid black;' id=" + "cell_client_" + x_client + "_" + y_client + "><pre>     </pre></td>";