2010-08-06 7 views
1

J'utilise la bibliothèque javascript Prototype (et script.aculo.us) - puisque c'est ce qui est livré avec Rails "en standard" - et ayant un problème avec ce qui suit snippet:Javascript Prototype .visible() méthode ne fonctionnant pas dans Internet Explorer

function show_hide_selects() 
{ 
    chkbox = document.getElementById('game_random_select') 
    seldiv = document.getElementById('card_selects') 

    if (chkbox.checked && seldiv.visible()) 
    { 
    Effect.BlindUp('card_selects', {duration: 0.5}) 
    Effect.BlindDown('random_options', {duration: 0.5}) 
    } 
    else if (!chkbox.checked && !seldiv.visible()) 
    { 
    Effect.BlindUp('random_options', {duration: 0.5}) 
    Effect.BlindDown('card_selects', {duration: 0.75}) 
    } 
} 

Cet extrait est tiré onClick pour la case « game_random_select » qui contrôle si l'utilisateur veut spécifier une liste de cartes-noms, ou laisser le serveur pour faire un choix aléatoire. Il doit masquer l'ensemble non pertinent des éléments de formulaire et afficher l'ensemble pertinent.

Cela fonctionne très bien dans FireFox, mais ne fonctionne pas dans Internet Explorer (testé IE 8). Il génère une erreur "L'objet ne supporte pas cette propriété ou méthode" sur l'une des lignes if-test; l'utilisation du débogueur JS indique que c'est seldiv.visible() qui ne fonctionne pas.

Comment puis-je détecter la visibilité de l'élément dans IE - sûrement Prototype devrait être complètement compatible avec IE? Ou je ne serai jamais capable de le gérer avec Prototype, et je devrais passer à jQuery - ce qui serait évidemment Effort, car je devrai aussi obtenir Rails pour se conformer.

+0

Pouvez-vous également afficher le code HTML? –

Répondre

2

Huh. J'ai trié cela moi-même, en lisant la documentation de l'API et en repérant quelque chose que je ne faisais pas.

seldiv.visible() ne fonctionne pas, mais $('card_selects').visible() fait.

0

Vous pouvez getStylehttp://www.prototypejs.org/api/element/getStyle, il retournera null si l'élément possède une propriété display de none.

+0

Courez comme je l'ai ci-dessus, cela ne fait aucune différence. Mais la référence de l'API indiquait quelque part que je n'utilisais pas Prototype, alors j'ai résolu ce problème. Voir ma propre réponse. – Chowlett

Questions connexes