ThiefMaster のアプローチは機能しますが、同じことを行う必要がある場所が複数ある場合は、考慮すべき小さな問題があります。2 つの別個の div で同じことを行う必要があるとします。この呼び出しe.stopPropagation()
により、div2 をクリックしたときに div1 が非表示にならなくなります。
例
div1.addEventListeners('click', function(e){
e.stopPropagation();
}, false);
div2.addEventListener('click', function(e) {
e.stopPropagation();
}, false);
document.body.addEventListener('click', function(e) {
div1.style.display = 'none';
div2.style.display = 'none';
}, false);
したがって、より安全な代替手段は次のとおりです(簡単にするためにjQueryを使用します)http://jsfiddle.net/qzMnj/1/
$(function() {
function hideWhenClickOutside(element) {
$(document).click(function(e){
if ( !element.contains(e.target)) {
$(element).hide();
}
});
}
hideWhenClickOutside(document.getElementById('div1'));
hideWhenClickOutside(document.getElementById('div2'));
})
私が言いたいのは、電話をかけるstopPropagation()
ことには望ましくない副作用があるということです。電話をかける必要がないのであれば、誰もそのクリックを気にしないことが確実でない限り、電話をかけないほうがよいでしょう。