1

est-il un événement à traiter entre le dom: chargé et charger en utilisant Prototype javascript framework?
Je l'ai mis en place un prototype utilisant préchargement qui est à la recherche comme celui-ci:Javascript Événement hiérarchie dans le cadre du prototype

Event.observe(window,"load",preload); 
function preload(){ 
    if($('wrapper')) 
     $('wrapper').setStyle({"display":"block"}); 
    if($('loading')) 
     setTimeout('$("loading").fade({duration: 5.0});',4000); 
} 

j'ai un autre gestionnaire en utilisant la hauteur colonne fixatioan qui est:

Event.observe(window,"load",function(){ 
    var bottomExtraOffset = (Prototype.Browser.IE) ? 100 : 130; 
    if(parseInt($$('.col1')[0].getStyle('height')) > parseInt($$('.col2')[0].getStyle('height'))) 
     $('wrapper').setStyle({'height' : parseInt($$('.col1')[0].getStyle('height'))+bottomExtraOffset+'px'}); 
    else 
     $('wrapper').setStyle({'height' : parseInt($$('.col2')[0].getStyle('height'))+bottomExtraOffset+'px'}); 
});//observe  

Il travaille assez agréable dans n'importe quel navigateur mais IE! Il semble que IE n'ajoute pas le deuxième gestionnaire à la liste des gestionnaires onload, donc quand le premier essaye d'obtenir la hauteur de l'une des colonnes, il renvoie 0 coz il est toujours affiché comme none.

est-il un autre événement que charge & dom: chargé à manipuler et me outta ça !?

Répondre

0

Il n'y a pas un tel événement AFAIK, et même l'événement dom: loaded est implémenté par les développeurs Prototype et ce n'est pas un événement par défaut dans JS. Vous voudrez peut-être utiliser une aide pour faire un retard dans l'exécution du second gestionnaire, de sorte que le premier sera effectué d'abord:

function foo(){ 
    var bottomExtraOffset = (Prototype.Browser.IE) ? 100 : 130; 
    if (parseInt($$('.col1')[0].getStyle('height')) > parseInt($$('.col2')[0].getStyle('height'))) { 
     $('wrapper').setStyle({'height' : parseInt($$('.col1')[0].getStyle('height')) + bottomExtraOffset + 'px'}); 
    } 
    else { 
     $('wrapper').setStyle({'height' : parseInt($$('.col2')[0].getStyle('height')) + bottomExtraOffset + 'px'}); 
    } 
} 

function bar() { 
    // One msec delay. 
    setTimeout(foo, 1); 
} 

Event.observe(window, "load", bar); // or window.observe("load",bar); 

Vous pouvez également vérifier si l'agent utilisateur est un peu l'enfer comme IE, puis utilisez cette méthode et votre dit autrement.

+0

ouah! merci beaucoup, ça fonctionne comme un charme^o^vous savez, vous venez de répondre à ma question précédente dont nous avons discuté auparavant sans une telle solution, il a fallu 3 jours pour trouver le problème, merci quand même. –

0

Pouvez-vous simplement appeler la deuxième fonction après avoir terminé preload()? Si vous ne voulez pas l'appeler directement après la commande preload(), vous pouvez faire quelque chose comme définir un indicateur, puis définir un délai dans la fonction de la section pour attendre que le premier ait été exécuté.

Si la commande est importante, vous devez communiquer entre les fonctions.

+0

Je ne peux pas appeler directement la seconde après la première en raison de l'algorithme de script entier. Je travaille sur votre suggestion, merci Ryan. –

Questions connexes