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

jQuery Discussion :

Comment agir sur le premier ul


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 165
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 165
    Par défaut Comment agir sur le premier ul
    Bonjour à tous,

    J'ai recupérer un code qui me permets de dérouler mes sous menu.

    Ce code me plait, mais j'aimerais avoir l'option que les sous-menu se deroule orizotalement.

    Je ne peux le faire que verticalement

    Alors j'essaye de modifier le code.

    Je mettrai le code complet qui n'est pas enorme.

    Je pesne que je dois agir sur cette partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $this.hover(function () {
                    if(settings.instantlyCloseOthers === true)
                        $allDropdowns.removeClass('open');
     
                    window.clearTimeout(timeout);
                    $parent.addClass('open');
                    //$this.css('border','3px solid #ff22ff')
                    $this.trigger(showEvent);
                });
    A savoir que la class open s'ajoute sur le li qui le parent du ul que je soihaite qui s'affiche sur sa droite, et se deploie verticalement

    J'ai ajouter ce qui est en commentaie.
    J'aimerais remplacer ceci pour que le ul enfant au li se déploie horizontalement , sur la droite, et juste en bordure du li, au meme niveau. Et que se dernier se deploie verticalement.

    Et ainsi de suite, le prochaine sous menu de deploie a droite du li (donc a l'horizontal) et il se deploie verticalement.

    Je n'arrive pas deja remplacer ceci
    //$this.css('border','3px solid #ff22ff')

    J'ai essayl ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this.find('ul.dropdown-menu').css('background-color','#ff22ff');
    Pour qu'il agisse sur le ul enfant au li.

    Pourriez-vous me guider?

    merci

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 165
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 165
    Par défaut
    J'ai partielement trouvé.

    Je ne devais pas faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this.find('.dropdown-menu').css("background-color", "red");
    mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $parent.find('.dropdown-menu').css("background-color", "red");
    Le truc maintenant est de le déplacer à droite, à une distance egal à la largeur du li.

    Je ne comprends pas pourquoi quand je change ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      $parent.find('.dropdown-menu').css("position", "absolute");
                    $parent.find('.dropdown-menu').css("right", "20px");
    Il n'y a absolument rien qui se passe.
    Il devait au moin se deplacer de 20px, non?

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 165
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 165
    Par défaut
    Ben j'ai trouvé, mais suis pas trop confient sur mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      // this helps with button groups!
                $this.hover(function () {
                    if(settings.instantlyCloseOthers === true)
                        $allDropdowns.removeClass('open');
     
                    window.clearTimeout(timeout);
                    $parent.addClass('open');
                    $parent.find('.dropdown-menu').css("position", "absolute").css("top","0px").css("left",$parent.width());
                    $this.trigger(showEvent);
                });
    Voici le code complet de la fonction

    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
    $.fn.droprightHover = function (options) {
            // don't do anything if touch is supported
            // (plugin causes some issues on mobile)
            if('ontouchstart' in document) return this; // don't want to affect chaining
     
            // the element we really care about
            // is the dropdown-toggle's parent
            $allDropdowns = $allDropdowns.add(this.parent());
     
            return this.each(function () {
                var $this = $(this),
                    $parent = $this.parent(),
                    defaults = {
                        delay: 500,
                        instantlyCloseOthers: true
                    },
                    data = {
                        delay: $(this).data('delay'),
                        instantlyCloseOthers: $(this).data('close-others')
                    },
                    showEvent   = 'show.bs.dropdown',
                    hideEvent   = 'hide.bs.dropdown',
                    // shownEvent  = 'shown.bs.dropdown',
                    // hiddenEvent = 'hidden.bs.dropdown',
                    settings = $.extend(true, {}, defaults, options, data),
                    timeout;
     
                $parent.hover(function (event) {
     
                    // so a neighbor can't open the dropdown
                    if(!$parent.hasClass('open') && !$this.is(event.target)) {
                        // stop this event, stop executing any code 
                        // in this callback but continue to propagate
                        return true; 
                    }
     
                    if(settings.instantlyCloseOthers === true)
                        $allDropdowns.removeClass('open');
     
                    window.clearTimeout(timeout);
                    $parent.addClass('open');
                    $this.trigger(showEvent);
                }, function () {
                    timeout = window.setTimeout(function () {
                        $parent.removeClass('open');
                        $this.trigger(hideEvent);
                    }, settings.delay);
                });
     
                // this helps with button groups!
                $this.hover(function () {
                    if(settings.instantlyCloseOthers === true)
                        $allDropdowns.removeClass('open');
     
                    window.clearTimeout(timeout);
                    $parent.addClass('open');
                    $parent.find('.dropdown-menu').css("position", "absolute").css("top","0px").css("left",$parent.width());
                    $this.trigger(showEvent);
                });
     
                // handle submenus
                $parent.find('.dropdown-submenu').each(function (){
                    var $this = $(this);
                    var subTimeout;
                    $this.hover(function () {
                        window.clearTimeout(subTimeout);
                        $this.children('.dropdown-menu').show();
                        alert("3");
                        // always close submenu siblings instantly
                        $this.siblings().children('.dropdown-menu').hide();
                    }, function () {
                        var $submenu = $this.children('.dropdown-menu');
                        subTimeout = window.setTimeout(function () {
                            $submenu.hide();
                        }, settings.delay);
                    });
                });
            });
        };
    Que me diriez-vous pour mieux faire?

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 207
    Par défaut
    Bonjour,
    l'essentiel se passant dans la déclaration du style de la class open, autant utiliser celle ci en modifiant son CSS. Ensuite faire comme c'est fait dans le code initial en ajoutant/supprimant la class open.

Discussions similaires

  1. [AC-2007] Comment, par Access, agir sur les options Excel ?
    Par LeMin dans le forum VBA Access
    Réponses: 3
    Dernier message: 25/02/2015, 11h09
  2. [XL-2007] liste de validation - comment se placer sur le premier élement
    Par vali25 dans le forum Excel
    Réponses: 2
    Dernier message: 07/03/2012, 10h05
  3. Réponses: 2
    Dernier message: 17/03/2011, 14h13
  4. Réponses: 10
    Dernier message: 18/08/2006, 12h14
  5. [VB6] Comment boucler sur des controls d'un form ?
    Par lankviller dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 27/01/2003, 16h29

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