Problème avec les événement dans la balise option et Safari

Syltron

Membre enregistré
5 Avril 2008
2
0
Bonjour, j'ai un petit souci avec ce code:

<select name="typeAppareil">
<option value="Densite" onclick="Effect.Fade('choixAnalyse')">Densit&eacute;</option>
<option value="GC" onclick="Effect.Appear('choixAnalyse')">GC</option>
</select>

Les effets sont tirés des librairies Scriptaculous, tous marche bien sur Firefox mais malheureusement rien ne fonctionnent avec Safari 3.1 :mouais: . Apparemment Safari ne permet pas la gestion des événements dans la balise option, quelqu'un a-t-il déjà contourné le problème?

Merci d'avance Syltron
 
Bonjour, j'ai un petit souci avec ce code:

<select name="typeAppareil">
<option value="Densite" onclick="Effect.Fade('choixAnalyse')">Densit&eacute;</option>
<option value="GC" onclick="Effect.Appear('choixAnalyse')">GC</option>
</select>

Les effets sont tirés des librairies Scriptaculous, tous marche bien sur Firefox mais malheureusement rien ne fonctionnent avec Safari 3.1 :mouais: . Apparemment Safari ne permet pas la gestion des événements dans la balise option, quelqu'un a-t-il déjà contourné le problème?

Merci d'avance Syltron

Ben déjà si tu utilises prototype et scriptaculous, c'est un brin bizarre de faire du javascript obstrusif comme ca ( je suis pas sur du terme obstrusif), tu ferais mieux d'utiliser des observer (avec un peu de recherche sur prototype tu y arriveras).
De plus tu ne donnes pas beaucoup d'informations sur les codes en jeu.
 
Effectivement c'est plus propre de sortir le javascript du html (désolé je début), donc du coup j'ai regardé la documentation de Prototype (merci pour le tuyau :) ) mon code ressemble à ça maintenant:

ajax.js

document.observe('click', function(event) {
var element = event.findElement('option.blindDown');
if (!element) return;
Effect.BlindDown('choixAnalyse');

event.stop();
});

document.observe('click', function(event) {
var element = event.findElement('option.blindUp');
if (!element) return;
Effect.BlindUp('choixAnalyse');

event.stop();
});

Ceci me permet d'avoir un effet sur un formulaire en fonction du choix de l'utilisateur sur un <select>, afin de faire apparaître ou l'inverse des champs de mon dit formulaire.
Malheureusement Safari ne voit toujours pas l'événement et Firefox oui...
 
Peut être qu'au lieu d'observer le 'click', tu devrais observer le 'change' de ton select. Après tu récupères la valeur sélectionnée dans ton callback, et tu agis en fonction.
Tu devrais aussi regarder les : Form.EventObserver et Form.Element.Observer dans la doc de prototype.
Bonne chance.
 
Ca marche?
Je te donne quand meme un bref exemple:
Bloc de code:
function init(){

    function stateOfField(element, value){
        if(value=="Densite"){
            new Effect.BlindUp($('hide'));
        }
    }

    new Form.Element.EventObserver("sel_field_id",stateOfField);
}
document.observe('dom:loaded',init);
C'est du vite fait. Il faut faire attention à ce que le dom ait bien été chargé avant d'instancier ton Field.EventObserver.
Le code HTML correspondant serait du genre:
Bloc de code:
    <form>
        <select  id="sel_field_id" name="typeAppareil">
        <option value="Densite">Densit&eacute;</option>
        <option value="GC">GC</option>
        </select>
    <div id="hide">
    <input type="radio" name="sex" value="male"> Male
    <br>
    <input type="radio" name="sex" value="female"> Female
    </div>
    </form>