2011-09-21 21 views
26

Bir tanesini yeniden boyutlandırılabilir algılamak için pencere yeniden boyutlandırmak ve diğerini algılamak üzere 2 olayım var.jQuery UI yeniden boyutlandırılabilir yangın penceresi yeniden boyutlandırma olayı

Ancak div'u yeniden boyutlandırdığımda, konsolda pencere yeniden boyutlandırma olayını algılar.

Bunu engellemenin bir yolu var mı?

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

Örnek: http://jsfiddle.net/qwjDz/1/ yüzünden olay köpüren bu davranışı görmek

+0

. Bir elemanın genişliği ve yüksekliği değiştiğinde, pencere yeniden boyutlandırma ile bir ilgisi olmamalıdır. –

cevap

21

. Bir geçici çözüm: event.target kullanarak geri aramasında olayın kaynağını kontrol edin:

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

Demo: http://jsfiddle.net/mattball/HEfM9/


diğer çözüm boyutlandırılabilir bir resize işleyici ekleyin ve etkinliğin yayılmasını kadar durdurmak DOM ağacı (bu "kabarcıklanma"). (Düzenleme: Bu işe, ama nedense yapar gerekir değil. http://jsfiddle.net/mattball/5DtdY)

+2

Yükseltme çünkü op nasıl yapıldığını bilmiyor. –

+0

Teşekkürler! Bu jQueryUI 1.6 (1.5) yükseltmeden sonra başladı ve neyin yanlış olduğunu hiçbir fikrim yoktu. Şimdi yukarıdaki gibi yeniden boyutlandırma olaylarını filtreliyorum ve işe yarıyor. – BastiBen

+0

@Matt Ball - event.target öğesi, öğenin kendisi değil, yeniden boyutlandırma işleyicileri (en azından 1.8 sürümünde) değil. Yani, sınıf ismini ** ui-resizable-handle ** ile karşılaştırmak ya da event.target öğesini pencere elemanının kendisiyle karşılaştırmak daha iyi olurdu. – Mohoch

6

Aslında en güvenli aşağıdakileri yapmak olacağını düşünüyorum: JQuery 1.7 ile, Benim için

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

Bu IE8'de benim için işe yaramaz, burada event.target '' window' ile aynıdır. Benim için çalışan bir çözüm, fare koordinatlarının varlığını kontrol etmektir: if 'event.clientX' tanımlıysa, jQuery resizable olayıdır. 'Event.clientX' tanımlı değilse, "true" bir pencere yeniden boyutlandırılır. – Blaise

3

.2 burada önerilen çözümden hiçbiri işe yaramadı. Bu yüzden ... eski IE tarayıcıları yanı sıra Chrome'da çalışır biraz farklı bir ile gelmek zorunda kaldı

$(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"); 
}); 

resized eleman bir <div>

23
daha başka bir şeydir, bu uyarlanabilir gerekebilir

Tüm bu cevaplar yardımcı olmayacak. Sorun, pencereye kadar olayları yeniden boyutlandırmaktır. Sonuç olarak, e.target, yeniden boyutlandırma, div üzerinde gerçekleşse bile penceredir. Yani gerçek cevabı basitçe yeniden boyutlandırma olayını ilerleyen durdurmak için: Bu bir hata olmak zorunda

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

Gitmenin en iyi yolu budur (hedefle saldırmak veya clientX bile sorunlara neden olur). – suda