javascript - 使用原型(prototype)观察注入(inject)元素上的事件

标签 javascript prototypejs dom-events

我问了一个问题previously ,它以我提出的形式正确回答,但现在意识到为什么它对我不起作用。

我有这个代码来观察多个选择菜单:

$('product_options').select('select').invoke("observe","change",optchange); 

正如所指出的,这确实适用于像这样的静态布局:

<html> 
  <head> 
    <title>optchange</title> 
    <script type="text/javascript" src="prototype.js"></script> 
  </head> 
  <body> 
    <div id="product_options"> 
      <select id="o0"> 
        <option>1</option> 
        <option>2</option> 
      </select> 
      <select id="o1"> 
        <option>1</option> 
        <option>2</option> 
      </select> 
      <select id="o3"> 
        <option>1</option> 
        <option>2</option> 
      </select> 
    </div> 
    <script type="text/javascript"> 
      function optchange(e) { 
        alert("optchanged"); 
      } 
      $('product_options').select('select').invoke("observe","change", optchange); 
    </script> 
  </body> 
</html> 

但在我的上下文中,在第一个选择菜单中进行选择会触发 Ajax.Updater,它完全替换了 Select 2 的内容 - 这会杀死事件观察者。有没有办法解决这个问题,而不必每次都应用新的事件观察器?

最佳答案

您在这里寻找的是事件冒泡 - 通过事件冒泡,您可以仅将一个事件处理程序分配给更高的元素,浏览器会将其子级上的所有事件沿链传递到其父级。你最终会得到更像这样的东西:

$('product_options').observe("change",function(event){optchange(event);});

function optchange(event){
    console.log(Event.findElement(event, 'select'));
}

但是,这里有一些问题 - 根据this post select 事件在 IE6 中不会冒泡

关于javascript - 使用原型(prototype)观察注入(inject)元素上的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2998433/

相关文章:

javascript - 如何将js变量传递给Rails函数

javascript - 将 "converted"对象字符串转换为 JSON 或对象

javascript - JavaScript 和 jQuery 中的单击源,人工还是自动?

javascript - Chrome 扩展程序注入(inject) Javascript 按钮更改页面

javascript - JSLint 错误 : Undeclared 'Image' , 未声明 'Document' ,超出范围

javascript - 更改 D3 定向力图中箭头标记的方向

javascript - 在 Objective C 中解析 Open Graph 元属性/标签

javascript - 从 iframe 触发的事件可以由其父元素处理吗?

javascript - 如何调试谁覆盖了我的 jQuery ajax 行为?

javascript - 单击图像的元素时播放视频