javascript知道你什么时候';重新单击表格行的第一个单元格

javascript知道你什么时候';重新单击表格行的第一个单元格,javascript,Javascript,我有一个表格,以报表的形式显示表格数据。我试图做到这一点,当您单击行上的任意位置时,它将导航到该特定项目的更详细视图 HTML(来自PHP) ''。 ''. “a”。 “b”。 “c”。 '' Javascript function ViewItem(elThisRow, ItemNum) { // If first <td> was clicked, return // ? // Otherwise, navigate to item windo

我有一个表格,以报表的形式显示表格数据。我试图做到这一点,当您单击行上的任意位置时,它将导航到该特定项目的更详细视图

HTML(来自PHP)

''。
''.
“a”。
“b”。
“c”。
''
Javascript

function ViewItem(elThisRow, ItemNum)
{
    // If first <td> was clicked, return
    // ?

    // Otherwise, navigate to item
    window.location="/viewitem.php?i=" + ItemNum;
}
函数视图项(elThisRow,ItemNum)
{
//如果单击了第一个,则返回
// ?
//否则,导航到项目
window.location=“/viewitem.php?i=“+ItemNum;
}
单击和导航部分工作正常,但唯一的问题是,第一部分有一个复选框控件

因此,现在我无法真正使用复选框,因为当我单击它时,页面将导航到别处:(

有没有办法确定单击了哪个单元格,这样我就可以阻止它在第一个单元格中导航


谢谢你

我不懂PHP,但是如果你想使用JQuery,应该会容易得多。
只需将单击事件绑定到每个td(列),然后根据列号决定要做什么。
事件
对象为您提供了一个
srcElement
target
属性(取决于您是否在IE上),这样您就可以看到单击了什么元素,从而忽略对输入元素的单击:

'<tr onClick="ViewItem(event, this, '.$ItemNum.')">'.

function ViewItem(e, elThisRow, ItemNum) {
     if (!e) e = window.event;
     var target = e.srcElement || e.target;

     if (target.tagName.toUpperCase() === "INPUT")
         return;

     window.location="/viewitem.php?i=" + ItemNum;
} 
''。
函数视图项(e、elThisRow、ItemNum){
如果(!e)e=window.event;
var target=e.src元素| | e.target;
if(target.tagName.toUpperCase()=“输入”)
返回;
window.location=“/viewitem.php?i=“+ItemNum;
} 
演示:

有关使用IE和其他浏览器处理事件之间差异的更多信息:


(当然,像jQuery这样的库也可以为您提供跨浏览器功能。)

即使使用jQuery,您仍然可以将单击绑定到行,但您需要检查事件对象的
target
属性,以查看是否是复选框被单击。为什么?我不能将单击绑定到?(我没有否决您的答案,但是)一般来说,减少事件处理程序会更有效。因此,是的,您当然可以绑定到每个td,但绑定到行“更干净”(您甚至可以只绑定到表,尽管我个人不这么认为)。我也没有否决您的答案,但显然有人否决了它以及我的问题:(哦,好吧……不能让每个人都满意:)哇,它像个符咒!谢谢!而且,我不知道“事件”的论点。那非常有用。
'<tr onClick="ViewItem(event, this, '.$ItemNum.')">'.

function ViewItem(e, elThisRow, ItemNum) {
     if (!e) e = window.event;
     var target = e.srcElement || e.target;

     if (target.tagName.toUpperCase() === "INPUT")
         return;

     window.location="/viewitem.php?i=" + ItemNum;
}