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 :

Mot clé "This"


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur web
    Inscrit en
    Mars 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 11
    Points : 8
    Points
    8
    Par défaut Mot clé "This"
    Bonjour,

    Je ne sais pas comment optimiser le code ci-dessous, qui fonctionne mais qui se répète beaucoup trop, j'ai fait quelques petits tests entre autres avec "this" mais je n'ai pas réussis..

    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
    <script>
    **$(document).ready(function () {
    ****$('a[href="#join"]').click(function (e) {
    ******e.preventDefault();
    ******var targetOffset = $('a[name="join"]').offset().top;
    ******$('body').animate({ scrollTop: targetOffset }, 600);
    ****});
    ****$('a[href="#find-parking"]').click(function (e) {
    ******e.preventDefault();
    ******var targetOffset = $('a[name="find-parking"]').offset().top;
    ******$('body').animate({ scrollTop: targetOffset }, 600);
    ****});
    ****$('a[href="#parking-minute"]').click(function (e) {
    ******e.preventDefault();
    ******var targetOffset = $('a[name="parking-minute"]').offset().top;
    ******$('body').animate({ scrollTop: targetOffset }, 600);
    ****});
    ****$('a[href="#reserve"]').click(function (e) {
    ******e.preventDefault();
    ******var targetOffset = $('a[name="reserve"]').offset().top;
    ******$('body').animate({ scrollTop: targetOffset }, 600);
    ****});
    ****$('a[href="#parking-mounth"]').click(function (e) {
    ******e.preventDefault();
    ******var targetOffset = $('a[name="parking-mounth"]').offset().top;
    ******$('body').animate({ scrollTop: targetOffset }, 600);
    ****});
    ****$('a[href="#getin-getout"]').click(function (e) {
    ******e.preventDefault();
    ******var targetOffset = $('a[name="getin-getout"]').offset().top;
    ******$('body').animate({ scrollTop: targetOffset }, 600);
    ****});
    ****$('a[href="#community"]').click(function (e) {
    ******e.preventDefault();
    ******var targetOffset = $('a[name="community"]').offset().top;
    ******$('body').animate({ scrollTop: targetOffset }, 600);
    ****}); </script>


    Ce que j'ai essayé et ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <script>
    **$(document).ready(function () {
    ****$('a[href="#join"], a[href="#find-parking"], etc..').click(function (e) {
    ******e.preventDefault();
    ******var targetOffset = $(this).offset().top;
    ******$('body').animate({ scrollTop: targetOffset }, 600);
    ****});
    </script>
    Merci d'avance

  2. #2
    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
    Points : 9 944
    Points
    9 944
    Par défaut
    C'est la guerre des étoiles ?

    Utilise event.currentTarget pour récupérer l'élement d'où provient l'évènement, et ajoute une classe à tes liens concernés plutôt que tous les lister un par un (ici j'ai choisi targetToScroll) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     $('a.targetToScroll').click(function (e) {
          e.preventDefault();
          var targetOffset = $(e.currentTarget).offset().top;
          $('body').animate({ scrollTop: targetOffset }, 600);
    });
    je crois que this marche aussi car jQuery change le contexte d'appel pour les events listeners, mais je préfère les bonnes vieilles méthodes

  3. #3
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    "this" n'est pas un mot clé avec jquery, le mot clé qui correspond à l'objet est "$(this)".

    Par ailleurs un simple ciblage avec $('body') ne fonctionnera pas avec IE ou Firefox. Il faut viser aussi le html.

    En reprenant la suggestion de SylvainPV cela donne :
    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
    <!DOCTYPE html>
    <html lang="fr">
    <head>
    <meta charset="UTF-8" />
    <title>Document sans nom</title>
    <script src="//code.jquery.com/jquery-1.11.3.js"></script>
    <script type="text/javascript">
    $(function() {	   
    	$('a.targetToScroll').click(function (e) 
    	{
    		e.preventDefault();
    		var targetOffset = $(this).offset().top;
    		$('html,body').animate({ scrollTop: targetOffset }, 600);
    	});
     });
    </script>
    </head>
     
    <body>
    <div style="height:500px"></div>
    <a href="#a" class="targetToScroll" >azerty</a>
    <a href="#b" class="targetToScroll">wxcvbn</a>
    <div style="height:2500px"></div>
    </body>
    </html>

Discussions similaires

  1. onmouseover=&quot;Menu_HoverStatic(this)&quot; object expected
    Par cyrano_de_bergerac dans le forum ASP.NET
    Réponses: 0
    Dernier message: 01/10/2010, 16h01

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