Javascript 从行单击获取已单击的列索引

Javascript 从行单击获取已单击的列索引,javascript,Javascript,我有一个行点击事件。最近不得不在每一行中添加一个复选框。如何在行单击事件中标识单击的单元格 或在单击复选框时阻止行单击 尝试:在行单击事件中未定义this.parentNode.cellIndex 函数弹出(行){ 警报(行。单元格[1]。innerText); } 挑选 场地 洛诺登 您应该将事件详细信息传递给您的函数,并检查目标属性: 函数pop(e){ //如果目标不是复选框。。。 如果(!e.target.matches)(“输入[type='checkbox']”)匹配){ 警

我有一个行点击事件。最近不得不在每一行中添加一个复选框。如何在行单击事件中标识单击的单元格

或在单击复选框时阻止行单击

尝试:在行单击事件中未定义this.parentNode.cellIndex

函数弹出(行){
警报(行。单元格[1]。innerText);
}

挑选
场地
洛诺登

您应该将事件详细信息传递给您的函数,并检查
目标
属性:

函数pop(e){
//如果目标不是复选框。。。
如果(!e.target.matches)(“输入[type='checkbox']”)匹配){
警报(如target.cellIndex);
}
}

挑选
场地
洛诺登

你想要这样的东西吗?只需检查事件源元素的
type
属性并验证是否允许,即可使用
e.stopPropagation()停止事件;返回

函数pop(e,行){
log(e.srcielement.type);
if(e.srceelement.type==='checkbox'){
e、 停止传播();
返回;
}否则{
控制台日志(行);
警报(行。单元格[1]。innerText);
}
}

挑选
场地
洛诺登

如果您不想在每一行上都附加一个侦听器,下面是一个示例:

document.getElementById(“主要功能”).addEventListener(“单击”,函数(e){
如果(e.target.type==='复选框'){
var checked=e.target.checked;
var tr=e.target.parentElement.parentElement;
var city=tr.cells[1].innerHTML;
console.log(城市+”:checked=“+checked);
}
});

挑选
场地
伦敦
巴黎
纽约

这里是一个有趣的例子,另一个例子是一个包含城市名称的对象,以及一个使用与单击城市名称对应的ID绘制表格的方法,因此获取单击名称更容易

(函数(){
var mySpace=window |{};
mySpace.cities={};
mySpace.cities.pointer=document.getElementById(“majorCities”);
mySpace.cities.names=[“选择”、“城市”];
mySpace.cities.data=[{“名称”:“巴黎”},{“名称”:“新德里”},{“名称”:“华盛顿”},{“名称”:“曼谷”},{“名称”:“悉尼”}];
mySpace.cities.draw=function(){
this.pointer.innerHTML=“”;
var html=“”;
html+=“”
for(var i=0;i
表格{宽度:25%;背景:#ccc;边框:1px纯黑色;文本对齐:左;}
td,tr{背景:白色;}
th:类型{width:20%;}的第一个


您想要选中行的列表吗?@zer00ne最终是的,但不在此行单击事件中。一个简单的解决方案是使用双击进行行选择,然后打开single以单击复选框。谢谢,但我需要确定单击的列索引,恐怕不是行索引:(+1你的想法是对的@Naren Murali。不过有点小问题。即使我点击复选框,警报仍然会弹出,对吗?。我会使用你的代码并尝试修复它。干杯!@Prosper问题是当你点击复选框时它不会出现,否则它会认为它是另一个元素,你需要添加一个比复选框大的div,设置为包含
td
标记的me属性,然后检查该属性是否存在,然后
td
标记包含一个复选框!感谢您的澄清。
window.pop = function(row){
    console.log('here');
    var parent = row.parentNode;
  Array.from(row.parentNode.querySelectorAll('tr')).forEach(function(tr, index){
    if (tr === row) {
        alert(index)
    }
  })
}