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 :

Ajout dynamique de lien sur balise <img>


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Août 2010
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 30
    Par défaut Ajout dynamique de lien sur balise <img>
    Bonjour à tous,

    Je suis confronté à un problème que je n'ai réussi que partiellement à résoudre, n'étant pas expert en la matière je m'en remets à vous !

    Je vous présente la situation :

    Site intranet Sharepoint
    IE8
    WebPart des annonces

    Pour ceux qui ne s'y connaissent pas, vous n'avez qu'à voir la chose comme un CMS, l'objectif étant de redimensionner automatiquement les images à l'intérieur des posts, et d'ajouter un lien vers elles-même sur celles-ci quand la résolution de l'écran de l'utilisateur est faible et qu'elles sont trop grandes, tout ceci sans intervention des rédacteurs.

    Exemple simplifié :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <div class="post" id="1">
    ...
    <img src="SRC1" width="800"/>
    ...
    </div>
    <div class="post" id="2">
    ...
    <img src="SRC2" width="500"/>
    ...
    </div>

    Devient si on ne veut pas d'image plus large que 700px :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <div class="post" id="1">
    ...
    <a href="SRC1"><img src="SRC1" width="700"/></a>
    ...
    </div>
    <div class="post" id="2">
    ...
    <a href="SRC2"><img src="SRC2" width="500"/></a>
    ...
    </div>

    N'ayant pas trouvé comment rajouter une balise parent à une balise (ajouter <a> .. </a> en l'occurence), j'ai décidé de simplement rajouter un 'onclick',
    Voici ce que j'obtiens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    var imgs=document.getElementsByTagName('img');
    for (var i = 0; i < imgs.length; ++i) {
    	var img = imgs[i];
      	if(img.width > 470 && screen.width < 1280){
      		imgsrc = img.src;
      		img.style.cssText = 'width: 470px !important; height: auto !important; cursor:pointer;';
                    img.attachEvent("onclick", function(){window.open(imgsrc);});
      	}	
      	else if(img.width > 700) {
      		img.style.cssText = 'width: 700px !important; height:auto !important;';
      	}
    }
    Pourquoi attachEvent ? Parcequ'IE ne gère pas ou mal setAttribute (en l'occurence ça ne fonctionne pas du tout pour onclick).

    Pas de souci au niveau du redimensionnement des images, le code fait exactement ce que je veux en fonction de la taille des images et/ou de la résolution de l'écran.

    Le problème se trouve au niveau des liens des images : le code ajoute bien un 'onclick' à toutes les images, mais rajoute la même adresse pour toutes les images (adresse d'une image de la page, je ne sais pas pourquoi c'est l'adresse de telle image et pas d'une autre).
    D'après moi cela devrait marcher puisque le code en question se trouve bien dans la boucle avec une variable ..

    Précision : le code n'est destiné qu'à IE8, l'entreprise n'utilisant que ce navigateur.

    Une idée ?

    Merci d'avance

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    a quel moment est lancé ce script ?
    ou est il placé sur la page ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre averti
    Inscrit en
    Août 2010
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 30
    Par défaut
    Bonjour SpaceFrog, merci de ta contribution.

    Le script est placé dans <head>, j'aurais voulut l'écrire en tant que fonction sur body.onload, mais ceci impliquerait de modifier une masterpage et donc de le lancer pour toutes les pages, or ce script n'est destiné qu'à une seule page du site Sharepoint.

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    placé dasn le head sans etre lancé dans le onload implique que tu essaye d'atteindre des objets non encore créés !

    place le dans une balise script en bas de page juste avant la balise de fermeture du body.
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    img.onclick = function(){window.open(this.src);};
    ne fonctionnerait pas mieux ?
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  6. #6
    Membre Expert Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Par défaut
    Citation Envoyé par Bovino Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    img.onclick = function(){window.open(this.src);};
    ne fonctionnerait pas mieux ?
    Citation Envoyé par micmackill Voir le message
    Bonjour Bovino,

    Malheureusement dans ce cas là this ne renvoie pas à l'image actuelle (j'ai essayé, this.src renvoie 'undefined').

    Merci de ton aide.
    la solution de bovino est pourtant la bonne et de loin la plus simple :

    voici ton code en ligne avec cette fonction et ça fonctionne :

    http://ulb.comli.com/onclick.html

    (testé sous IE 8)


    autrement, (si tu n'as pas confiance dans le this) ta solution deviendrait simplement :
    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    		img.onclick = (function(src){return function(){window.open(src);};})(imgsrc);

    ou pour garder ton style d'écriture (attachEvent):
    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    		img.attachEvent("onclick", (function(src){return function(){window.open(src);};})(imgsrc));

    bien que la première écriture est plus simple (et compatible à tous les navigateurs) donc même pour un usage unique à IE8, je l'utiliserai.

  7. #7
    Membre averti
    Inscrit en
    Août 2010
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 30
    Par défaut
    Pardon, je dis n'importe quoi.

    La balise script contenant le code est placée en bas de page, bien après le contenu.

    Ma page .aspx est un peu en foutoir et j'ai mal lu mon PlaceHolder.

    Donc pas de souci à ce niveau, le code n'aurait pas du tout marché sinon !

  8. #8
    Membre averti
    Inscrit en
    Août 2010
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 30
    Par défaut
    Bonjour Bovino,

    Malheureusement dans ce cas là this ne renvoie pas à l'image actuelle (j'ai essayé, this.src renvoie 'undefined').

    Merci de ton aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Liens sur balise <li>
    Par mimagyc dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 16/10/2008, 10h54
  2. Ajout dynamique de label sur un form
    Par katoyi dans le forum VB.NET
    Réponses: 3
    Dernier message: 29/05/2008, 14h58
  3. Ajout dynamique de textbox sur un step Wizard
    Par thierry007 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 31/10/2007, 17h44
  4. Réponses: 7
    Dernier message: 01/03/2006, 18h14

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