2011-09-21 2 views
26

2 개의 이벤트가 있습니다. 하나는 윈도우 크기를 감지하고 다른 하나는 div의 크기 조정 가능한 정지를 감지합니다.jQuery UI resizable fire window resize 이벤트

하지만 div에서 크기를 조정할 때 콘솔에서 창 크기 조정 이벤트를 감지합니다.

차단할 방법이 있습니까?

$(document).ready(function(){ 
    $(window).bind('resize', function(){ 
     console.log("resize");  
    }); 
    $(".a").resizable(); 
}); 

예 : http://jsfiddle.net/qwjDz/1/ 당신 때문에 이벤트 버블 링이 동작을 볼 수

+0

. 어떤 요소의 너비와 높이가 변경되면 윈도우 크기 조정과 관련이 없어야합니다. –

답변

21

. 한 가지 해결 방법 : event.target를 사용하여 콜백 이벤트의 소스를 확인 :

$(window).bind('resize', function(event) { 
    if (!$(event.target).hasClass('ui-resizable')) { 
     console.log("resize"); 
    } 
}); 

데모 : http://jsfiddle.net/mattball/HEfM9/


또 다른 해결책은 크기 조정에 resize 처리기를 추가하고 이벤트의 전파를 중지하는 것입니다 DOM 트리 ("버블 링").은 (편집 :이 작동하지만 어떤 이유로 수행해야하지 :. http://jsfiddle.net/mattball/5DtdY)

+2

Op는 방법을 모르기 때문에 Upvote. –

+0

감사! 이것은 jQueryUI 1.6 (1.5에서)로 업그레이드 한 후에 시작되었으며 무엇이 잘못되었는지 전혀 몰랐습니다. 이제 위와 같은 크기 조정 이벤트를 필터링하고 작동합니다. – BastiBen

+0

@Matt Ball - event.target 요소는 요소 자체가 아니라 적어도 1.8 버전에서 크기 조정 핸들러입니다. 따라서 클래스 이름을 ** ui-resizable-handle **과 비교하거나 event.target을 window 요소 자체와 비교하는 것이 좋습니다. – Mohoch

6

내가 실제로 가장 안전한 다음을 수행 할 수있을 것이라고 생각 : JQuery와 1.7, 나를 위해

$(window).bind('resize', function(event) { 
    if (this == event.target) { 
     console.log("resize"); 
    } 
}); 
+1

) IE8에서는이 기능이 작동하지 않습니다. 여기서 'event.target '는'창'과 동일합니다. 나에게 맞는 솔루션은 마우스 좌표의 존재를 확인하는 것이다.'event.clientX'가 정의되면 jQuery 크기 조절이 가능한 이벤트이다. 'event.clientX'가 정의되어 있지 않으면, 그것은 "true"윈도우의 크기입니다. – Blaise

3

.2 여기서 제안 된 해결책 중 어느 것도 효과가 없었다. 그래서 ... 오래된 IE 브라우저뿐만 아니라 크롬에서 작동 약간 다른 하나 마련했다

$(window).bind('resize', function(event) { 
    if ($(event.target).prop("tagName") == "DIV") {return;} // tag causing event is a div (i.e not the window) 
    console.log("resize"); 
}); 

크기를 조정할 요소가 <div>

23
보다는 뭔가 다른 경우이 적응해야 할 수도 있습니다

이러한 답변은 모두 도움이되지 않습니다. 문제는 크기 조정 이벤트가 창에 표시된다는 것입니다. 따라서 결국 div에 크기가 조정 된 경우에도 e.target이 창으로 표시됩니다. 그래서 진짜 대답은 단순히 크기 조정 이벤트를 전파 중지하는 것입니다 : 이것은 버그가 수 있도록이

$("#mydiv").resizable().on('resize', function (e) { 
    e.stopPropagation(); 
}); 
+3

이것이 최선의 방법입니다 (대상을 해킹하거나 심지어 clientX도 문제를 일으킬 수 있습니다). – suda