【问题标题】:How to get caller element using Javascript?如何使用Javascript获取调用者元素?
【发布时间】:2010-06-08 21:32:38
【问题描述】:

我有一个 id 为“tbl”的表,它有 2 行和 3 个列。每个 cell(td) 都有一个明确定义的 id。此外,该表有一个调用函数 foo() 的 onclick 事件。每当单击任何单元格时都会生成 onclick()。 表格标签是

我也试过 javascript:foo(this)

我想找出被点击的表格单元格的id。

我已经尝试了以下 javascript

function foo(e)
{
    var sender = (e && e.target) || (window.event && window.event.srcElement);
    alert("Sender" + sender.id);
}

这在 Google Chrome 和 IE 中效果很好,但在 Firefox 中却不行。在 Firefox 中,发件人是未定义的。 如何在 Firefox 中获取调用方单元格?

【问题讨论】:

  • @drachenstern:我认为强制 jQuery 有点太过分了。所有流行的框架都处理浏览器差异。 jQuery 也是我的最爱,但我想“你为什么不使用框架?”是一个更公正的问题。
  • @drachenstern:在尝试 JQuery 之前我不应该擅长 Javascript 吗?
  • @wacky_coder ~ 不适合这样的事情,因为学习如何包含所有浏览器怪癖和学习如何编写代码来用 javascript 做事是有区别的。我使用框架来处理怪癖和细节,我自己编写功能部分。就像我对 C# 所做的一样。我没有尝试弄清楚如何读取文件系统,我使用 .NET 框架为我做这件事,我编写代码来完成功能部分。我可以将这种类比扩展到许多事物,例如列表。但是你是对的,你应该知道为什么它会像你的代码显示的那样工作。 +1
  • @wacky_coder ~ 我想指出这一点,只是为了明确一点:我不反对自己滚动,尤其是对于像这样简单的东西,因为我早在学习 jQuery 之前就开始编写 JS,但我似乎总是沉迷于记住检查每个浏览器的所有内容的乏味。如果你不去一个框架,至少写你自己的伪框架,这样你就不必在每个函数中处理跨浏览器的差异。这是框架的最大好处。是的,有插件,所以这些很有趣,但这不是我切换到框架 js 代码的原因......
  • @drachenstern :即使我在大部分工作中都使用 .NET 框架。它处理了我需要承担的所有痛苦,但有时,必须在不使用框架提供的设施的情况下编写代码。那是我必须潜入的时候!

标签: javascript html javascript-events


【解决方案1】:

首先,从onclick 属性中删除javascript:。您将此与链接的 href 属性中的 javascript 混淆了。在 Javascript 代码中,javascript: 将创建一个名为“javascript”的label

除此之外,foo(event) 应该可以在您的最终 JavaScript 代码示例中正常工作。它在 Firefox 中不起作用但在 Chrome 和 IE 中起作用的原因是;它们都支持全局事件对象window.event(当您的e.target 产生undefined 时对其进行评估,因为this 是一个没有target 属性的元素)。 Firefox 不支持全局 event 对象。

进一步阅读:

【讨论】:

    猜你喜欢
    • 2014-02-26
    • 2012-07-19
    • 1970-01-01
    • 2022-06-29
    • 1970-01-01
    • 2013-03-08
    • 2011-09-03
    • 2014-02-19
    • 2021-02-05
    相关资源
    最近更新 更多