【问题标题】:e.target is working only on linkse.target 仅适用于链接
【发布时间】:2013-12-09 16:44:01
【问题描述】:

我是一个菜鸟,我正在开发一个 chrome 插件,它提供有关在网页中单击的元素的信息,

它工作正常,但问题是 e.target 仅适用于链接和输入框,但是当我单击某些文本时它不执行任何操作,它是空白的 [预期:内部 div 的 id/class/etc文本存在]

这是我的代码(请不要标记我,因为我真的很陌生):

document.addEventListener("click", function (e) {
    var dom_id    = e.target.getAttribute("id");
    var dom_name  = e.target.name.toString();
    var dom_class = e.target.className.toString();
    var dom_html  = e.target.innerHTML;
    var dom_href  = e.target.getAttribute("href");
    var dom_text  = e.target.text;
    var dom_el    = e.target.tagName;
    var dom_src   = e.target.src;
}, false);

我想要的是当我点击div 时,我应该得到 div 信息,span 应该给出 span 信息,等等。

【问题讨论】:

  • 我已经尝试过当前的目标,但它不起作用,它正在停止脚本本身

标签: javascript jquery html css google-chrome-extension


【解决方案1】:

问题

由于(基于您的 another question),似乎监听器已正确注册(例如,在加载 DOM 之后,我看到的唯一问题是您正在调用 e.target.name.toString(); .

解释

它只适用于具有name 属性集的元素(不仅适用于链接或输入,还适用于任何具有name 属性的元素)。对于没有name 的元素,将引发异常,因为您正在调用undefined 的方法toString(当name 属性缺失时,e.target.name 等于undefined)。
(注意className 不是这种情况,因为className 指的是元素属性(不是直接class 属性,当class 属性缺失时它默认为空字符串。)

解决办法

只需删除 .toString() 部分即可:

var dom_name = e.target.name;

根据您稍后使用该 var 的方式,如果未定义,您可能需要添加检查并将其设置为空字符串:
var dom_name = (e.target.name !== undefined) ? e.target.name : '';

【讨论】:

  • 不是真的: 1. 这意味着问题只绑定到“id”(这是不正确的)。 2.它声明getAttribute()如果没有设置属性会抛出错误(这是不正确的)。 3. 提供的代码未能成功检查属性是否存在(使用getAttribute() 而不是hasAttribute())。 4. 它没有描述真正的问题(在未定义的对象上调用toString())。 (请注意,根据之后代码的处理方式,三元运算符可能根本不需要。)
  • 太棒了,它奏效了。我只需要删除 toString()。这太酷了 。非常感谢队友。
  • 为了以后能够自己检测到这些琐碎的问题,你需要让控制台日志成为你的朋友:)
  • 我现在肯定会这样做,非常感谢你,伙计:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-14
  • 1970-01-01
  • 1970-01-01
  • 2012-09-11
  • 1970-01-01
  • 2014-02-16
  • 2020-07-10
相关资源
最近更新 更多