2013-01-17 3 views
1

jquery .mouseup()을 사용하여 사용자가 팝업 외부를 클릭하면 닫습니다. 내 문제는 처음 사용되었을 때만 작동한다는 것입니다. .on() 버전을 사용해 보았지만 도움이되지 않습니다..mouseup() 한 번만 실행

$(document).ready(function() { 
    $(document).mouseup(function(e) { 
     var container = $("#mpop-loop"); 
     if (container.has(e.target).length === 0) { 
     container.fadeOut("fast").remove(); 
     } 
    }); 
}); 

$(document).ready(function() { 
    $(document).on("mouseup", function(e) { 
     var container = $("#mpop-loop"); 
     if (container.has(e.target).length === 0) { 
     container.fadeOut("fast").remove(); 
     } 
    }); 
}); 

어떻게가 트리거있어이 작업 매번 만들 수 있습니까?

+1

왜 그냥 클릭 이벤트를 바인딩? –

+0

컨테이너가 페이드 아웃되면 어떻게 다시 페이드합니까? – Blazemonger

+0

@JamesAllardice 그 (것)들은 그 (것)들에게 그들이 원하는 무슨을에 반대 기능을주는 팝업 ** 안 ** ** 인식에서만 그 결과 귀착되지 않을 ㄴ가 것입니다? –

답변

0

.has은 요소 자체를 무시하고 하위 항목에서만 작동합니다. 이 (당신이 어쨌든 문서에 이벤트를 바인딩하고 있기 때문에 당신이 $(document).ready 필요하지 않습니다) 시도 : 당신이 클릭에 트리거 할 경우

$(document).on("mouseup", function(e) { 
     var container = $("#mpop-loop"); 
     if (!container.has(e.target).length && !container.is(e.target)) { 
     container.fadeOut("fast"); 
     } 
    }); 

http://jsfiddle.net/mblase75/bWDXH/

0
$('body').click(function(){ 

    $("#mpop-loop").fadeOut("fast"); 

}); 

"# mpop-loop"를 제거하면 컨테이너를 다시 열 때 이벤트를 다시 추가해야 할 수 있습니다.

+1

이벤트는 '' 태그에 바인딩되어 있으므로 (' '전체를 제거/대체하지 않는 한) 모든 이벤트 핸들러를 리 바인드 할 필요가 없습니다. 이 기능은 설명 된 기능을 제공하지 않습니다. –

0

"on"함수의 위임을 사용하고 ": not (.popup-class)"필터를 사용하여 팝업 이벤트가 아닌 페이지의 모든 요소에 click 이벤트를 위임 할 수 있습니까? 팝업을 클릭하면 닫기가 실행되지 않도록 한 번 생각해보십시오.

+0

이걸 좋아하니? ''* : not (# mpop-loop) ''가 필요하지만'$ (document) .on ('클릭', ': 아니다 (# mpop-loop)', function() {' –

+0

모든 것과 일치하는 와일드 카드 선택자 –