IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Petit souci avec un "return false"


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 90
    Par défaut Petit souci avec un "return false"
    Bonsoir à tous

    Voilà en cherchant un code sur le net, je suis tombé sur un code qui pourrais éventuellement me convenir.

    Le code en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    function ffalse()
    {
    return false;
    }
    function ftrue()
    {
    return true;
    }
    document.onselect = new Function ("return false");
    document.onselectstart = new Function ("return false");
    document.oncontextmenu = new Function ("return false");
    document.ondrag = new Function ("return false");
    document.ondragend = new Function ("return false");
    document.ondragenter = new Function ("return false");
    document.ondragleave = new Function ("return false");
    document.ondragover = new Function ("return false");
    document.ondrop = new Function ("return false");
    document.ondragstart = new Function ("return false");
    document.ondragdrop = new Function ("return false");
    document.oncopy = new Function ("return false");
    document.onbeforecopy = new Function ("return false");
    document.onpaste = new Function ("return false");
    document.onbeforepaste = new Function ("return false");
    document.oncut = new Function ("return false");
    document.onbeforecut = new Function ("return false");
    document.ondblclick = new Function ("return false");
    document.onhelp = new Function ("return false");
    if(window.sidebar)
    {
    document.onmousedown = ffalse;
    document.onclick = ftrue;
    }
     
    function Disable(objEvent) 
    {
    try {
    var sKey;
    if(window.event){sKey = window.event.keyCode;} else if(objEvent){sKey = objEvent.which;}   
    var objEvent = objEvent || window.event; 
    if(sKey == 16 && objEvent.ctrlKey){return false;} //ctrl + majuscule
    if(sKey == 27 && objEvent.ctrlKey){return false;} //ctrl + esc
    if(sKey == 45 && objEvent.ctrlKey){return false;} //ctrl + ins
    if(sKey == 65 && objEvent.ctrlKey){return false;} //ctrl + a
    if(sKey == 66 && objEvent.ctrlKey){return false;} //ctrl + b
    if(sKey == 67 && objEvent.ctrlKey){return false;} //ctrl + c
    if(sKey == 68 && objEvent.ctrlKey){return false;} //ctrl + d
    if(sKey == 69 && objEvent.ctrlKey){return false;} //ctrl + e
    if(sKey == 70 && objEvent.ctrlKey){return false;} //ctrl + f
    if(sKey == 71 && objEvent.ctrlKey){return false;} //ctrl + g
    if(sKey == 72 && objEvent.ctrlKey){return false;} //ctrl + h
    if(sKey == 73 && objEvent.ctrlKey){return false;} //ctrl + i
    if(sKey == 75 && objEvent.ctrlKey){return false;} //ctrl + k
    if(sKey == 77 && objEvent.ctrlKey){return false;} //ctrl + m
    if(sKey == 78 && objEvent.ctrlKey){return false;} //ctrl + n
    if(sKey == 80 && objEvent.ctrlKey){return false;} //ctrl + p
    if(sKey == 82 && objEvent.ctrlKey){return false;} //ctrl + r
    if(sKey == 83 && objEvent.ctrlKey){return false;} //ctrl + s
    if(sKey == 84 && objEvent.ctrlKey){return false;} //ctrl + t
    if(sKey == 85 && objEvent.ctrlKey){return false;} //ctrl + u
    if(sKey == 86 && objEvent.ctrlKey){return false;} //ctrl + v
    if(sKey == 89 && objEvent.ctrlKey){return false;} //ctrl + y
    if(sKey == 90 && objEvent.ctrlKey){return false;} //ctrl + z
    if(sKey == 91 && objEvent.ctrlKey){return false;} //ctrl + windows
    }
    catch(ex) {
    alert(ex.toString());
    }
    }
    document.onkeydown = Disable;
    Le souci est pour les combinaison de touche avec le CTRL qui normalement dois me retourner faux.

    Si je prend l'exemple que j'aurais besoin, le CTRL + P. Des que je fais cette combinaison, le choix des imprimantes se lance alors qu'elle ne devraient pas.

    Pour info: Se code est pour être intégré dans un logiciel et non sur un site web. Il devra être lu par Internet Explorer 6. Donc si quelqu’un me dit que chez lui sa fonctionne sur Firefox, Opéra ou Chrome, cela ne résous pas mon souci.

    Merci à tous ceux qui peuvent m'aider. Amicalement.

  2. #2
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    à quoi sert de créer toutes ces fonctions new Function ("return false"); ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function ffalse()
    {
    return false;
    }
    ...
    document.onselect = ffalse;
    document.onselectstart = ffalse;
    document.oncontextmenu = ffalse;
    document.ondrag = ffalse;
    document.ondragend = ffalse;
    document.ondragenter = ffalse;
    ....
    enfin pourquoi tout ces if
    on veut retourner false si sKey fait partit d'une liste de valeur et que la touche Ctrl est enfoncée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    ctrlKeyMap = [16,27,45,65,66,67,68,69,70,71,,72,73,75,77,78,80,82,83,84,85,86,89,90,91];
     
    document.onkeydown =function (objEvent)
    {
      try {
        // la doc préconise d'utiliser le paramètre s'il existe et event par défaut (pas le contraire)
        var sKey = (objEvent) ? objEvent.which : event.keyCode;
        var ctrlKey = (objEvent) ? objEvent.ctrlKey: event.ctrlKey;
     
        // la touche est dans la map
        // ctrlKeyMap.indexOf(sKey) !== -1 => true/false
        // la touche est la map et ctrl est enfoncé
        // (ctrlKeyMap.indexOf(sKey) !== -1) && ctrlKey  => true/false
     
        // on veut retourner true quand cette expression vaut false et false quand elle vaut true
        // on veut donc la négation de cette expression
        // (! ((ctrlKeyMap.indexOf(sKey) !== -1) && ctrlKey))  => false/true
        // cette expression a la valeur qu'on veut retourner il suffit de la retourner
        return (! ((ctrlKeyMap.indexOf(sKey) !== -1) && ctrlKey));
      }
      catch(ex) {
         console.log(ex.toString());
      }
    }
    Quelle différence entre ta fonction et celle-ci ? la principale différence est que cette fonction retourne true dans le cas où la touche enfoncé n'est pas une des touche de ctrl de la liste. mais ça ne change rien au reste.

    Le comportement devrait donc être le même.

    Reste la question de base pourquoi Ctrl+P ouvre l'imprimante alors que tu as mis un return false ?
    la réponse est simple tu interceptes un événement qui n'est pas celui qui ouvre l'imprimante.
    où ton interprète ne gère pas le return false sur les événements.

    il faut savoir que le return false bien que très largement supporté n'est pas dans la norme.
    pour éviter que l'action par défaut soit exécutée il faut utiliser event.preventDefault().
    Mais comme tu as à faire à IE ce serait trop simple certaine version d'IE gèrent le return false d'autres pas, certaine gèrent le preventDefault d'autres pas, et certaine on introduit la propriété returnValue;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    if (objEvent) {
      if (objEvent.preventDefault) {
        objEvent.preventDefault();
      } else {
        objEvent.returnValue = false;
      }
    } else {
      if (event.preventDefault) {
        event.preventDefault();
      } else {
        event.returnValue = false;
      }
    }
    reste le choix de l'événement l'imprimante s'ouvre
    Sur l'événement keyPress Ctrl + p ?
    Sur l'événement keyDown Ctrl + p ?
    Sur l'événement keyUp Ctrl + p ?
    pour résoudre ce dernier problème il suffit d'affecter la même fonction au trois
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    document.onkeyUp = document.onkeydown;
    document.onkeyPress = document.onkeydown;
    A+JYT

  3. #3
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par défaut
    Bloquer les raccourcis clavier du navigateur ne rend pas service à l'utilisateur. Je doute qu'il y ait une bonne raison de faire ça.

  4. #4
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    oui ce qui ne l’empêchera pas de passer par les menu

    A+JYT

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 90
    Par défaut
    Bonjour à Tous

    Merci sekaijin je regarde tous sa et je retiens au courant dans la soirée ou maximum demain.

    Pour répondre à SylvainPV, comme je l'ai précisé, c'est pour une utilisation logiciel qui utilise le rendu d'internet explorer 6 et non pour l'utiliser directement dans internet explorer en lui même. Tous se passera en local pas besoin de connexion internet. Une fois dans le logiciel, il y a que le rendu seulement aucun menu rien juste une page blanche que je rempli à ma guise. Le seul souci est que si je suis sur cette page blanche, certaines combinaisons de touches m'ouvre internet explorer donc c'est juste pour désactiver certain aspect dut à la navigation du logiciel pour garder un coté esthétiques.

    Amicalement

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 90
    Par défaut
    Voilà tests effectués.

    Déjà pour commencer je comprend pas très bien le javascript. C'est pour cette raison que j'essaye de trouver des scripts près à l'emploi (Dans la mesure j'essaye de l'adapté à ma convenance en y allant par logique ou à tâtons).

    Pour la façon de réduire le code je suis preneur histoire de tout alléger.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    function ffalse() { return false; }
     
    document.onselect = ffalse;
    document.onselectstart = ffalse;
    document.oncontextmenu = ffalse;
    document.ondrag = ffalse;
    document.ondragend = ffalse;
    document.ondragenter = ffalse;
    document.ondragleave = ffalse;
    document.ondragover = ffalse;
    document.ondrop = ffalse;
    document.ondragstart = ffalse;
    document.ondragdrop = ffalse;
    document.oncopy = ffalse;
    document.onbeforecopy = ffalse;
    document.onpaste = ffalse;
    document.onbeforepaste = ffalse;
    document.oncut = ffalse;
    document.onbeforecut = ffalse;
    document.ondblclick = ffalse;
    document.onhelp = ffalse;
     
     
    function ctrlKeyMap() {
     
     
    ctrlKeyMap = [16,27,45,65,66,67,68,69,70,71,,72,73,75,77,78,80,82,83,84,85,86,89,90,91];
     
    document.onkeydown = function (objEvent)
    {
      try {
     
        var sKey = (objEvent) ? objEvent.which : event.keyCode;
        var ctrlKey = (objEvent) ? objEvent.ctrlKey: event.ctrlKey;
     
     
        return (! ((ctrlKeyMap.indexOf(sKey) !== -1) && ctrlKey));
      }
      catch(ex) {
         console.log(ex.toString());
      }
    }
     
    }
    Voilà pour faire simple se que je souhaite faire c'est d'empêcher ses raccourcis. Si je fait CTRL + P rien ne s'ouvre.

    Après les tests et pleins d'erreurs, j'ai réussi à le faire sans erreurs mais tous ne fonctionne pas.

    La première partie fonctionne bien pour désactiver sélection etc...

    Par contre la deuxième partie ne me bloque pas les combinaisons de touches voulus.

    Pour mieux comprendre:
    Le premier post, je l'ai poser comme je l'ai trouver par défaut. Pour ma part, je n'est pas besoin de tous bloquer donc dès que tous fonctionne je supprime tous se dont j'ai besoin pour les faire fonctionner.

    Amicalement

Discussions similaires

  1. petit soucis avec les listes
    Par Death83 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 03/09/2005, 10h08
  2. Petit souci avec clause where
    Par ybruant dans le forum SQL
    Réponses: 1
    Dernier message: 21/07/2005, 22h10
  3. petit souci avec des variables avec des fonctions psql
    Par dust62 dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 02/04/2005, 13h45
  4. [DEBUTANT] petits soucis avec un prgm de chat
    Par LechucK dans le forum MFC
    Réponses: 8
    Dernier message: 19/01/2004, 16h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo