2012-11-30 23 views
2

我想单击页面中的其他位置时隐藏div。对于这一点,我有:子元素的Prototype.js event.target.id

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

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

任何帮助,非常感谢!

回答

1

使用 '向上' 功能:

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

感谢的方法,我明白它应该如何工作,但上面的代码会抛出一个错误:无法调用null的方法'up'。还尝试使用$(e.target.id).up()!='myDiv',但我得到相同的错误,所以不确定是否缺少语法中的某些内容或为什么它不起作用。 – loreley

+0

@loreley,我想我犯了一个错误,更新了答案 –

+0

为了获得$(event.target).up()的id,我必须使用$(event.target).up()。readAttribute 'id')现在它可以工作,但.up()只选择第一个祖先。 – loreley