[JS] vreemd DOM-gedrag na AJAX call

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • TheLemon
  • Registratie: Augustus 2001
  • Laatst online: 02-04 14:15

TheLemon

daddy cool, crazy like a fool

Topicstarter
Ik heb iets vreemds na een AJAX-call. In dit geval gaat het om een updatepanel van .Net, maar dat moet niet uitmaken denk ik.

Ik zet een css class nadat ik de nieuwe html binnen heb via het updatepanel en daar zit een css3 transitie op.
Wanneer ik dit gewoon zo doe, skipt hij de transitie en komt hij meteen in de staat (achtergrondkleur in dit geval) van de toegevoegde class. Als ik die class zet met een setTimeout met 0ms, doet hij wel de transitie.
Dit werkt dus blijkbaar, maar ik vind het niet erg elegant.

Wie weet hoe dit komt en hoe ik het goed kan oplossen?

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Heb je een (online) testcase? (Bijv. jsfiddle). Zorg wel dat je testcase niet meer zaken bevat dan nodig voor 't reproduceren van je probleem.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 10-09 08:45
Volgens mij genereert de update-panel gewoon nieuwe html en zet deze in de panel. Dan is dat dus gewoon de standaard class van dat element en is er geen transitie. Als je settimeout gebruikt ziet ie het wel als een class-wijziging en toont ie wel de transitie.

De update-panel is hier dus waarschijnlijk wel degelijk de boosdoener.

Acties:
  • 0 Henk 'm!

  • TheLemon
  • Registratie: Augustus 2001
  • Laatst online: 02-04 14:15

TheLemon

daddy cool, crazy like a fool

Topicstarter
Nee, maar ik zet die class pas met js nadat de updatepanel klaar is. Ik zal de twee varianten even laten zien:

Dit doet het, maar zonder css transitie:
code:
1
currentModel.addClass('open');


Dit doet het mét css transitie:
code:
1
setTimeout(function(){currentModel.addClass('open');}, 0);

(met 0ms delay dus!)

Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 11-09 11:19

chem

Reist de wereld rond

0ms delay is eigenlijk geen delay maar "zodra het kan" FYI.

In de praktijk doet de browser dus een repaint waarschijnlijk en vv detecteert hij de verandering.

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 05-09 14:39

_Thanatos_

Ja, en kaal

In je eerste geval is wellicht de DOM nog aan het updaten... Leuk spul, die race-conditions in javascript :)

日本!🎌

Pagina: 1