非输入元素的JavaScript事件侦听器

时间:2012-12-10 17:14:10

标签: javascript jquery events javascript-events

  

可能重复:
  Is there a jQuery DOM change listener?
  How do can watch DOM Object properties?

有没有办法将事件绑定到非输入类型的元素?例如,将事件绑定到更改href属性时触发的锚元素。

3 个答案:

答案 0 :(得分:3)

您可以将处理程序绑定到非输入元素(clickmousemove等)上的所有类型的事件。但是,当属性发生更改时(例如链接上的href属性的示例),不会引发(一致的跨浏览器)事件。某些属性(如src)会导致事件(如load)作为次要事件,如bfavarello所指出的那样。

(关于元素的"mutation" events有一个现在已经死亡的提议,包括属性更改[种子突变],但它从未被广泛支持。有一个newer proposal,但它还没有广泛地支持。)

您当然可以使用轮询:保存旧值,并定期(通过setTimeoutsetInterval)查看是否已更改。除非您检查批次元素并且需要经常检查它们,否则这不一定是性能问题。

答案 1 :(得分:3)

DOM Mutation Observers可以做到这一点,但在撰写本文时,它们非常新,并且得不到很好的支持。

您是在撰写扩展程序还是类似程序(即,您不能控制那些修改DOM的代码)?这是这些事件的常见用例之一 - 您无法控制更改DOM的代码。我之前使用的是Mutation Summary,它在Chrome中运行良好。

如果您确实控制了修改DOM的代码 - 即您自己在自己的网站上修改属性 - 您可能希望在修改时自行启动自己的自定义事件属性。

答案 2 :(得分:1)

您可以向祖先添加DomSubtreeModified侦听器,或者如果您正在使用的浏览器支持,则可以在DOM对象的watch属性上使用src。< / p>

myImage.watch("src",function(id, oldval, newval){
    document.write("src changed!");
    return newval;    
});