Autor Zpráva
suvel
Profil
Zdravím.
Modelový příklad: Po kliknutí na div se zvětší jeho výška a tím i velikost okna - onresize ale nezareaguje. Nemůžu přijít na to, proč. Poradí mi prosím někdo? Dík.

<div style="width:100px;height:500px;border:1px solid red;" onclick="this.style.height=2000+'px'"></div>
<script>
function fce() {
  alert("zvetseno!");
}
window.onresize = fce();
</script>
pcmanik
Profil
suvel:
document.getElementById('mojDiv').onresize = fce;
Ale bude to fungovať len v Internet Exploreri. Iné prehliadače implementujú onresize len na window.

window.resize reaguje na zmenu na veľkosť okna (fyzicky zmeníš veľkosť samotnej aplikácie) a nie obsahu vo vnútri.

Prečo to vlastne dávaš do onresize a nie do onclick kde vykonávaš zmenu veľkosti?
suvel
Profil
pcmanik:
document.getElementById('mojDiv').onresize = fce;
Jen pro IE to nemá smysl

Prečo to vlastne dávaš do onresize a nie do onclick kde vykonávaš zmenu veľkosti?
Div se mění dynamicky, to neovlivním. Ale spolu s výškou divu se změní (is resized) velikost okna. Tak jak tuhle událost odchytím?
_es
Profil
suvel:
Ale spolu s výškou divu se změní (is resized) velikost okna.
Čo myslíš pod „oknom“? Okno celého prehliadača, či niečo iné? V mnohých prehliadačoch, prípadne pri zmene ich nastavenia, nemusí fungovať menenie veľkosti okna.

Div se mění dynamicky, to neovlivním.
Veď si ale písal: „Po kliknutí na div se zvětší jeho výška a tím i velikost okna“´Takže predsa môžeš všetko „vybaviť“ v rámci udalosti kliknutia.
suvel
Profil
_es:
Ten script je jen modelový příklad. Ve skutečnosti se výška divu mění dynamicky a já potřebuju tu změnu výšky nějak odchytit, abych ji následně mohl zjistit. A nevím jak... Přece snad nějaká událost proběhne?
pcmanik
Profil
suvel:
Ten skript čo "dynamicky" mení veľkosť toho divu sa nedá upraviť? A dopísať tam čo chceš spraviť? Resp. zavolať ďalšiu funkciu?
suvel
Profil
pcmanik:
Ne. Obsah divu posílá jako výsledek jiný web a já předem nevím, jak dlouhý text přijde. Opravdu potřebuju odchytit nějakou událost.
Keeehi
Profil
suvel:
A co událost přijetí toho odeslaného textu?
suvel
Profil
Keeehi:
A co událost přijetí toho odeslaného textu?
Jaká? Nějak mi nenapadá, k jaké události kromě teoretického onresize, které nefunguje, může dojít...
pcmanik
Profil
suvel:
Veď ako získavaš tie dáta z iného webu? Cez ajax nie? Tak je tam callback ktorým tie dáta vložíš na web, tak v tom callbacku vykonaj to čo chceš.
suvel
Profil
pcmanik:
Ne. Je to takhle: Do mojí stránky se načte z cizího webu js funkce, která z něj vloží text do mého divu:

<div id="ext_data"></div>
<script async="" src="https://www.adresa_webu/main.js" type="text/javascript"></script>

Tak to prostě je a já na to nemám vliv. Ale dojde k tomu, že je po načtení různá výška divu.


Ještě doplňuji: Nemůžu použít onload, protože do divu se to načte až potom - jinak by bylo jednoduché zjistit výšku elementu a bylo by to. A nemůžu se zjištěním výšky ani čekat, protože je to pokaždé za jinak dlouho.

Takže: Tím, že se po načtení změní výška divu, se něco stane. A ta změna by snad měla jít nějak odchytit.
pcmanik
Profil
suvel:
Nie zrovna najkrajšie riešenie, ale malo by fungovať.

DOMSubtreeModified je deprecated, ale fungovať by malo stále. Možná náhrada je MutationObserver, len to zas nemá podporu pre IE10.

$('#ext_data').on('DOMSubtreeModified propertychange', function() {
...
});
_es
Profil
suvel:
Asi by bolo vhodné nerobiť okolo toho také tajnosti, dať dostatočné informácie, a nemiasť tých, čo by ti chceli poradiť nejakými neexistujúcimi kliknutiami a pod. Tak sa teda na niečo kliká, či ide o <script> v HTML kóde? Na základe čoho ten cudzí skript pozná „tvoj div“? Ide o nejaký reklamný systém, či o čo?
suvel
Profil
_es
Žádné tajnosti, celé je to v #11. Při načtení stránky se načte externí js funkce, která do <div id="ext_data"> (innerHTML) uloží nějaký text, ale ten právě může být různě dlouhý a podle toho má pak ten div výšku. Žádné klikání. Myslel jsem, že změna rozměrů elementu vyvolá nějakou událost a já budu moct zjistit aktuální výšku toho divu. Toť vše. Jestli ta změna rozměru nevyvolá žádnou událost, budu se s tím muset smířit.
Uznávám, že v #1 je blbý příklad.


pcmanik:
Sláva, funguje, docela mám chuť zjistit v knihovně jquery, jak to mají udělané, vždyť je to přece javascript :-)
Díky.
pcmanik
Profil
suvel:
Och prepáč myslel som si, že tu jQuery bolo spomenuté. Tak potom v "čistom" JavaScripte by to bolo takto:

document.addEventListener("DOMSubtreeModified", fce);
// IE < 9
document.attachEvent("propertychange", fce);
_es
Profil
suvel:
Žádné tajnosti, celé je to v #11.
No to teda naozaj nie je „celé“, podstatné je predsa to, čo je v https://www.adresa_webu/main.js. To si asi nikto okrem teba nevyveští. Okrem toho sa vyjadruješ zmätočne. „Načítanie funkcie“ žiadne efekty so stránkou nespraví, môže to spraviť až zavolanie tej funkcie. Tá sa volá kde? V kóde v https://www.adresa_webu/main.js, či inde? Ak sa nevolá z cudzieho skriptu, tak žiadne špeciálne udalosti nepotrebuješ.

Sláva, funguje, docela mám chuť zjistit v knihovně jquery, jak to mají udělané, vždyť je to přece javascript :-)
Nebol by som si až tak istý, či to funguje vo všetkých prehliadačoch.
pcmanik
Profil
_es:
Nebol by som si až tak istý, či to funguje vo všetkých prehliadačoch.
DOMSubtreeModified - funguje vo všetkých prehliadačoch a IE9+
propertychange - je pre IE < 9

Pričom stará opera - tá ktoré nepoužíva WebKit jadro, zrejme nemá podporu pre nič. Ale to bude naozaj mizivé promile používateľo.
_es
Profil
pcmanik:
propertychange - je pre IE < 9
V IE8 to akosi nefunguje.
suvel
Profil
pcmanik:
OK, dík, je to jedno :-)
Chodí to v Mozille, Chromu, Edge i IE.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: