[jQuery] Safari reageert anders dan FF/IE*

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Lekker cryptische topictitel, waarvoor excuses. Als een modje een betere suggestie heeft, by all means wijzig het maar.

Ik heb een vraagje over de javascript engine van Safari (en Chrome, want die hebben dezelfde toch?)

Het zit (zeer sterk vereenvoudigd) zo:

Via Ajax laadt ik een pagina in een divje. Die pagina heeft een link erin, en als daar op geklikt wordt, moet er via Ajax een nieuwe pagina geladen worden.

Zoiets:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$(document).ready(function(){

//functie 1, die laadt de nieuwe html in de div
$(".AjaxLink").click(function(){
       $("#detail").load("ajax/laad.php");
});

});

//function change, die moet dingen gaan doen
function change()
{
       alert($(this).html());
}


PHP:
1
2
//laad.php
echo '<p onclick="change()">babbel</p>';


Zowel IE als Firefox vreten dit. Ik laad de pagina, ik klik op de p en hij alert keurig "babbel". In Safari voert ie de functie change niet uit.

Of ik de functie binnen de document.ready zet of niet maakt niet uit. De p een class geven en de via de juiste jquery selector de p aanspreken werkt in geen enkele browser.

Mijn vraag is nu, waarin verschilt Safari nu in de behandeling van opgehaalde HTML van IE en Firefox? Kán dit überhaupt worden opgelost?

(Nota bene, de functie change moet natuurlijk iets anders doen dan alerten he :) Die functie doet natuurlijk iets anders.)

Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
En je gebruikt jQuery, Prototype, MooTools of ... ???

Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
HuHu schreef op zaterdag 10 oktober 2009 @ 15:19:
En je gebruikt jQuery, Prototype, MooTools of ... ???
Ziet er uit als jQuery, in welk geval ik Spijtbetuiging zou adviseren eens te kijken naar de live en die functies i.p.v. inline events in te vullen.

Als ik zou moeten gokken, zou ik zeggen dat sommige browsers javascript wat niet statisch op de pagina stond niet uitvoeren wanneer script (op wat voor manier dan ook: script tags, inline events, etc.) dynamisch aan de DOM toegevoegd wordt. Uit veiligheidsoverwegingen wellicht.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hij heeft zich verdekt opgesteld, maar het staat er echt... ;)
De p een class geven en de via de juiste jquery selector de p aanspreken werkt in geen enkele browser.
jQuery dus. Maar volgens mij heeft het daarmee niets te maken toch? De functie doet het in IE en FF prima, het ligt dus aan de verschillen in javascript engine. (Denk ik dan...)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
R4gnax schreef op zaterdag 10 oktober 2009 @ 16:32:
[...]
Ziet er uit als jQuery, in welk geval ik Spijtbetuiging zou adviseren eens te kijken naar de live en die functies i.p.v. inline events in te vullen.

Als ik zou moeten gokken, zou ik zeggen dat sommige browsers javascript wat niet statisch op de pagina stond niet uitvoeren wanneer script (op wat voor manier dan ook: script tags, inline events, etc.) dynamisch aan de DOM toegevoegd wordt. Uit veiligheidsoverwegingen wellicht.
Crap, dat zou het idd moeten zijn. Dahaddikzellufmoetewete eigenlijk. Het verwarde me gewoon dat IE en FF het wel trokken. Nou ja, enfin enz.
Ik laat binnenkort in dit topic even weten of dat inderdaad de oplossing was, maar ik vermoed van wel.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Zoals verwacht was dit inderdaad de oplossing. Bedankt voor de hulp.

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

R4gnax schreef op zaterdag 10 oktober 2009 @ 16:32:
[...]
Als ik zou moeten gokken, zou ik zeggen dat sommige browsers javascript wat niet statisch op de pagina stond niet uitvoeren wanneer script (op wat voor manier dan ook: script tags, inline events, etc.) dynamisch aan de DOM toegevoegd wordt. Uit veiligheidsoverwegingen wellicht.
Niet browsers, eerder libraries gok ik. Geen idee wat jQuery onderhuids uitspookt met de load-method, maar als ik zonder gebruik te maken van een library middels innerHTML een element ergens inschiet met een inline eventhandler dan werkt dat gewoon in elke browser.

Een andere mogelijkheid is dat de property 'change' om een of andere reden in Safari (of door toedoen van de jQuery wrapping) binnen de scope van het element al bestaat. Dat is makkelijk te verifieren door gewoon de naam van de functie (en de aanroep) te veranderen :)

Intentionally left blank

Pagina: 1