Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/76.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 我如何知道onclick发生的特定行?_Javascript_Html_Dom - Fatal编程技术网

Javascript 我如何知道onclick发生的特定行?

Javascript 我如何知道onclick发生的特定行?,javascript,html,dom,Javascript,Html,Dom,我有一个html表,在其中一列中我有一个复选框 因此,每行都有一个复选框。 我有一个javascript函数,它由onclick触发 现在,我需要对单击复选框的特定行执行特定操作。 例如,如果我单击了第13行上的复选框,我希望能够对表的第13行执行某些操作。我想做的事情是用另一个html元素替换一个html元素。 我已经尝试并看到我可以使用document.getElementsByName或document.getElementById,但它使用名称或id值。 但是对于一个动态生成的表,我不知

我有一个
html
表,在其中一列中我有一个
复选框

因此,每行都有一个
复选框。
我有一个javascript函数,它由
onclick
触发
现在,我需要对单击复选框的特定行执行特定操作。
例如,如果我单击了第13行上的复选框,我希望能够对表的第13行执行某些操作。我想做的事情是用另一个html元素替换一个html元素。
我已经尝试并看到我可以使用
document.getElementsByName
document.getElementById
,但它使用
名称或
id
值。
但是对于一个动态生成的表,我不知道如何做到这一点。我的意思是如何关联
name
id
来解决这个问题。

解决此问题的方法是什么?

我不确定您是如何生成表的,但您可以做的一件事是为我关心的单元格或行使用id,并将行号合并到id中。例如,将第13行的id设置为“row_13”。然后在javascript(确切地说是onclick事件)中,您可以解析id中的13。或者更简单,将行号合并到复选框本身的id(复选框所在的行号)中,然后您不必使用javascript查找复选框的父项。

一种方法是

<tr>
  <td>
   <input type="checkbox" onClick='myOnClickHandler(event, this)' />
  </td>
</tr>

忽略所有其他人的盲目回答

根据我对您的问题的理解,您在表本身上有一个onclick处理程序,并且您希望得到它发生的行

在这种情况下,您可以这样做:

yourtable.onclick = function(e) {
  e|e=window.event;
  var t = e.srcElement || e.target;
  while(!t.tagName || t.tagName != "TR") t = t.parentNode;
  // t is now the row that the click happened on
}

另一方面,如果每个复选框上都有onclick事件,那么。。。实际上,你可以使用完全相同的代码^_^

简单的答案是-jQuery,只需侦听复选框上的单击事件,每个复选框都有一个具有不同名称/id的属性,然后在事件处理程序中,使用
$(this).attr('attribute\u name\u with\u id')
-presto)提取该信息。@MorganWilde,因为,当然。你有没有想过使用
this.getAttribute(“attribute\u name\u with\u id”)
?我有想过,但是@Kolink我绝对喜欢抽象的概念(当然你知道你所做的基本知识)。你仍然可以用C语言做所有的事情,但感谢上帝,人们把他们的思想抽象成越来越高的层次。没有必要担心jQuery。除非你真的在乎你的用户能够在半秒钟内加载页面;)jQuery在经济高效的情况下很好地使用。因此,我认为关键是检查jQuery标记是否存在。如果不是,那么如果建议使用jQuery解决方案,至少应该有一个简单的js替代方案。但是当我在启用
复选框时调用
onclick
函数时,如何获取
复选框所属行的
行id
?您可以使用适当的javascript函数定位父级。不过,更简单的是,您可以将行号合并到复选框本身的id中。复选框id中的数字将代表复选框所在的行。我假设您关心实际的行数,这就是我选择此路径的原因。如果不是,那么UmairP的解决方案就是一条路。是的,这更好。我想OP是特别关注行数的。但是,如果只是为了获得该行的dom,这就是答案。:)这怎么会有六张赞成票?它过于依赖于结构。如果复选框周围添加了一个标签会怎么样?+1,不需要假设有固定数量的父节点,也不需要任何额外的信息,事实上,如果这取决于它,那么一旦标记必须更改,我就在表的每一行显示一个
复选框
。即,每行都有自己的复选框。在
onclick
上调用的函数对于所有复选框(在所有行中)都是相同的。@Jim我要说的是,不要假装html永远不会改变,因为它总有一天会发生,而且你真的不想忘记脚本的某些部分依赖于确切的html(常见错误:我添加了一个按钮,现在,一些完全无关的东西正在停止工作,为什么?)@我想问的是,如果这个答案也涵盖了我的case@Kolink:我无法让您的示例工作。我在我的js控制台中得到:
未捕获的引用错误:无效的左侧赋值
。您能提供更多示例代码吗?
yourtable.onclick = function(e) {
  e|e=window.event;
  var t = e.srcElement || e.target;
  while(!t.tagName || t.tagName != "TR") t = t.parentNode;
  // t is now the row that the click happened on
}