Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.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_Html - Fatal编程技术网

Javascript 事件侦听器不能处理新添加的表列

Javascript 事件侦听器不能处理新添加的表列,javascript,jquery,html,Javascript,Jquery,Html,我有一个基本的HTML表可以加载。结构根据上传的CSV文件的内容而有所不同。表列需要可以拖动(为此我使用了一个名为Dragtable的插件)。然后我有了添加行和列的方法。add column方法如下所示: function addCol(tblId) { var tblHeadObj = document.getElementById(tblId).tHead; for (var h=0; h < tblHeadObj.rows.length; h++) { var newTH

我有一个基本的HTML表可以加载。结构根据上传的CSV文件的内容而有所不同。表列需要可以拖动(为此我使用了一个名为Dragtable的插件)。然后我有了添加行和列的方法。add column方法如下所示:

function addCol(tblId) {
 var tblHeadObj = document.getElementById(tblId).tHead;
 for (var h=0; h < tblHeadObj.rows.length; h++) {
    var newTH = document.createElement('th');
    tblHeadObj.rows[h].appendChild(newTH);
    colCount = (tblHeadObj.rows[h].cells.length);
    newTH.innerHTML = 'Col ' + colCount;
 }

 var tblBodyObj = document.getElementById(tblId).tBodies[0];
 for (var i=0; i<tblBodyObj.rows.length; i++) {
    var newCell = tblBodyObj.rows[i].insertCell(-1);
    newCell.innerHTML = "*null*";
 }
}
var table = document.getElementById("grid");
table.refresh ();
有没有办法做到这一点?或者,我添加列的方式是否有问题,这可能是事件侦听器未附加的原因

编辑

delete column方法如下:(通过适当的事件委派编辑了这解决了delete column方法的问题。尽管如此,我仍然无法对新列进行拖动和排序

$("table").delegate("th:not(:first)", "click", function() {
   var index = this.cellIndex;
   $(this).closest('table').find('tr').each(function() {
     this.removeChild(this.cells[ index ]);
   });  
}
关于draggable列排序,我只是将draggable类添加到表中。我不确定事件侦听器的外观:

<table id = "grid" class="draggable"></table>

您应该为此使用事件委派。您应该做的是向表本身添加一个事件侦听器,该侦听器检查事件对象的
.target
属性,以查看事件是否针对某个标题并采取适当的操作

除了事件委派方法外,另一个简单的修复方法是在添加新行时附加处理程序:

newTH.addEventListener("click", function(){
     //this should be your event listener
})

正如j08691所指出的,您可能错误地标记了jQuery,因此我现在不会再添加任何jQuery代码!您必须使用jQuery的on()方法和委托,来说明第一次呈现DOM后添加到DOM中的项。请发布事件侦听器的代码,以便我们向您展示如何修改它们以使用事件委派。此问题是否使用jQuery标记,因为您需要jQuery解决方案,因为我在您的代码中没有看到jQuery。感谢您的回答。我已经更新了我的问题。非常感谢,我已经成功地使delete方法起作用(请参见编辑的问题)。但是,可拖动列功能仍然不起作用,这是网站最重要的功能。我迫切需要帮助。有什么可以补充的吗?