jQuery-UI-Ereignis zur Größenänderung des Feuerfensters mit veränderbarer Größe

Lesezeit: 3 Minuten

Benutzer-Avatar
ilslabs

Ich habe 2 Ereignisse, eines zum Erkennen der Fenstergröße und das andere zum Erkennen des größenveränderbaren Stopps von div.

Aber wenn ich die Größe des div ändere, erkenne ich in der Konsole das Ereignis zur Größenänderung des Fensters.

Gibt es eine Möglichkeit, dies zu blockieren?

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

Beispiel: http://jsfiddle.net/qwjDz/1/

  • Das muss ein Bug sein. Es sollte nichts mit der Größenänderung von Fenstern zu tun haben, wenn die Breite und Höhe eines Elements geändert wird.

    – Timo Kähkönen

    20. Mai 2015 um 9:16 Uhr

Benutzer-Avatar
Björn

Alle diese Antworten werden nicht helfen. Das Problem ist, dass das Ereignis zum Ändern der Größe in das Fenster sprudelt. Also wird das e.target schließlich das Fenster sein, selbst wenn die Größenänderung auf dem div passiert ist. Die wirkliche Antwort besteht also darin, einfach die Weitergabe des Größenänderungsereignisses zu stoppen:

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

  • Dies ist der beste Weg (Hacking mit target oder sogar clientX würde nur Probleme verursachen).

    – suda

    1. Februar 2013 um 16:10 Uhr

Benutzer-Avatar
Mattball

Sie sehen dieses Verhalten aufgrund von Ereignisblasen. Eine Problemumgehung: Überprüfen Sie die Quelle des Ereignisses im Rückruf mit event.target:

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

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


Eine andere Lösung besteht darin, a hinzuzufügen resize Handler auf die veränderbare Größe und stoppen Sie die Ausbreitung des Ereignisses im DOM-Baum (das ist das “Blubbern”). (Bearbeiten: das sollte funktionieren, aber aus irgendeinem Grund nicht: http://jsfiddle.net/mattball/5DtdY.)

  • Vielen Dank! Dies begann nach dem Upgrade auf jQueryUI 1.6 (von 1.5) und ich hatte keine Ahnung, was falsch war. Jetzt filtere ich die Größenänderungsereignisse wie oben und es funktioniert.

    – BastiBen

    10. Dezember 2011 um 11:09 Uhr

  • @Matt Ball – das event.target-Element ist nicht das Element selbst, sondern die Resize-Handler (zumindest in Version 1.8). Es wäre also besser, entweder den Klassennamen mit zu vergleichen ui-resizing-handle oder vergleichen Sie event.target mit dem Fensterelement selbst.

    – Mohoch

    28. April 2013 um 14:56 Uhr

  • Es ist auch in Ordnung zu prüfen, ob das Ziel die getAttribute-Methode hat, die nur für DOM-Elemente-Objekte gilt, wie hier gist.github.com/beshur/8781777

    – Alex Busnik

    3. Februar 2014 um 10:41 Uhr

Ich denke, dass eigentlich das Sicherste wäre, Folgendes zu tun:

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

  • Dies funktioniert bei mir in IE8 nicht, wo event.target ist das gleiche wie window. Eine Lösung, die für mich funktioniert, prüft das Vorhandensein von Mauskoordinaten: if event.clientX definiert ist, handelt es sich um ein in der Größe veränderbares jQuery-Ereignis. Wenn event.clientX nicht definiert ist, handelt es sich um eine “echte” Fenstergrößenänderung.

    – Blaise

    25. April 2012 um 15:08 Uhr


Benutzer-Avatar
Johann

Für mich hat mit JQuery 1.7.2 keine der hier vorgeschlagenen Lösungen funktioniert. Also musste ich mir ein etwas anderes einfallen lassen, das sowohl auf älteren IE-Browsern als auch auf Chrome funktioniert …

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

Dies muss möglicherweise angepasst werden, wenn das in der Größe geänderte Element etwas anderes als a ist <div>

$(window).resize(function(e) {
  if (e.target == window)
    /* do your stuff here */;
});

http://bugs.jqueryui.com/ticket/7514

1176550cookie-checkjQuery-UI-Ereignis zur Größenänderung des Feuerfensters mit veränderbarer Größe

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy