【问题标题】:Prototype.js event.target.id for child elements子元素的 Prototype.js event.target.id
【发布时间】:2012-11-18 17:45:16
【问题描述】:

我想在单击页面中的其他位置时隐藏 div。为此,我有:

$(document.body).observe('click', function(e){
    if(e.target.id != 'myDiv') {
        $('myDiv').hide();
    }
});

工作正常,唯一的问题是在这个 div 中我还有其他元素,单击它们也会关闭#myDiv。我想要它,以便单击此 div 内的任何内容都不会触发隐藏。搜索后,我在这里找到了如何使用 jQuery 执行此操作的答案:https://stackoverflow.com/a/12222263/548524。但是,我似乎无法在 Prototype 中使用它,显然 has() 在这里无效。

非常感谢任何帮助!

【问题讨论】:

    标签: events onclick prototypejs hide


    【解决方案1】:
    document.observe('click', function(event) {
      if (!event.findElement('#myDiv')) {
        $('myDiv').hide();
      }
    });
    
    1. 你不需要$(document.body) - 已经有document-wide observe
    2. 有一个方法可以find element from event

    【讨论】:

      【解决方案2】:

      使用“向上”功能:

      $(document.body).observe('click', function(e){
          if(e.target.id != 'myDiv' && !$(e.target.id).up('#myDiv')) {
              $('myDiv').hide();
          }
      });
      

      【讨论】:

      • 谢谢,我明白它应该如何工作了,但是上面的代码抛出一个错误:无法调用 null 的方法 'up'。还尝试了 $(e.target.id).up()!= 'myDiv' 但我得到了同样的错误,所以不确定语法中是否缺少某些内容或为什么它不起作用。
      • 为了获得 $(event.target).up() 的 id,我不得不使用 $(event.target).up().readAttribute('id') 现在它可以工作了,但 .up() 只选择第一个祖先。
      • 好像我们同时添加了cmets!是的,你是对的,它现在完美运行,非常感谢!
      猜你喜欢
      • 2011-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-06
      • 2016-08-02
      • 1970-01-01
      • 2021-12-05
      相关资源
      最近更新 更多