Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 23/09/2006, à 01:47

Sleeper

[JavaScript] Application Web

Bonsoir,

Je désire réaliser une application avec les technologies du moment style Ajax, pour l'instant je travail sur JavaScript que je découvre suite à cette article très intéressant => http://pompage.net/pompe/separation/

Depuis toujours j'étais fixé sur XHTML, CSS et PHP sans vouloir utiliser des scripts exécuté du coté client mais comme il n'y a que les con qui ne changent pas d'avis big_smile

Donc c'est la première fois que je travail avec de l'orienté objet et je bloque sur un truc tout con j'en suis sur. C'est un script qui applique des PopUp sur tous les liens qui ont un attribut class="fiche"

function fiche(){
	var AttClass = "fiche"; // Class des liens où le script doit être appliqué
	var Hauteur = 300; // Hauteur du PopUp
	var Largeur = 600; // Largeur du PopUp
	var Top = (screen.height-Hauteur)/2; // Position du PopUp en haut en px
	var Left = (screen.width-Largeur)/2; // Position du PopUp à gauche en px
	var TagA = document.getElementsByTagName("a"); // Sélection de tous les tag A
	
	for(var i = 0; i < TagA.length; ++i){ // Pour chaque tag A
	
		if (TagA[i].getAttribute("class") == AttClass){ // Ayant l'attribut class = fiche
			
			var AttHref = TagA[i].getAttribute("href"); // Valeur de l'attribut href
			var AttTitle = TagA[i].getAttribute("title"); // Valeur de l'attribut title
			
			TagA[i].onclick = function(){
				
				window.open(AttHref,AttTitle,'height='+Hauteur+',width='+Largeur+',top='+Top+',left='+Left+',status=no,directories=no,toolbar=no,location=no,menubar=no,scrollbars=no,resizable=no');
				return false;
				
			}
		}
	}
}

Alors tout va bien dans ce script sauf une chose, les variables AttHref et AttTitle prennent la valeur du dernier lien trouvé et non pas du lien auquel TagA[i] se rapporte.

Je bloque donc sur ça par manque d'expérience.

Merci à celui qui saura m'aider.

big_smile

Dernière modification par Sleeper (Le 24/09/2006, à 07:37)


Intel Core i5 750 : 4Go DDR : HD 2To : ATI HD4850 1Go DDR3 : SyncMaster 226bw
Pourquoi choisir GNU/Linux ? : Les commandes de base
Openbox : sur Ubuntu ou Debian, le tout en un script.

Hors ligne

#2 Le 23/09/2006, à 02:05

Bebuntu

Re : [JavaScript] Application Web

Hop,

remplace ça :

            
            var AttHref = TagA[i].getAttribute("href"); // Valeur de l'attribut href
            var AttTitle = TagA[i].getAttribute("title"); // Valeur de l'attribut title
            
            TagA[i].onclick = function(){
                
                window.open(AttHref,AttTitle,'height='+Hauteur+',width='+Largeur+',top='+Top+',left='+Left+',status=no,directories=no,toolbar=no,location=no,menubar=no,scrollbars=no,resizable=no');
                return false;
                
            }

Par ça :

            
            TagA[i].onclick = function(){
                
               
                var AttHref = this.getAttribute("href"); // Valeur de l'attribut href
                var AttTitle = this.getAttribute("title"); // Valeur de l'attribut title
                window.open(AttHref,AttTitle,'height='+Hauteur+',width='+Largeur+',top='+Top+',left='+Left+',status=no,directories=no,toolbar=no,location=no,menubar=no,scrollbars=no,resizable=no');
                return false;
                
            }

Ca devrait rouler smile


p.s. window.open c'est le mal ! wink

Dernière modification par Bebuntu (Le 23/09/2006, à 02:07)

Hors ligne

#3 Le 23/09/2006, à 02:10

Bebuntu

Re : [JavaScript] Application Web

Donc c'est la première fois que je travail avec de l'orienté objet

Euh ? a part l'utilisation des méthodes DOM, tu fais quedal en objet là hmm

Hors ligne

#4 Le 23/09/2006, à 02:12

Sleeper

Re : [JavaScript] Application Web

J'ai déja essayé cette solution et je sais pas pourquoi ça ne fonctionne pas, les popup ne s'ouvre plus..

La console JavaScript affiche => Tag[i] has no properties pour la ligne => var AttHref = TagA[i].getAttribute("href");

Bebuntu a écrit :

p.s. window.open c'est le mal ! wink

C'est pas pour de la pub et c'est la meilleur solution que j'ai trouvé à mon prob. wink

Merci

Dernière modification par Sleeper (Le 23/09/2006, à 02:19)


Intel Core i5 750 : 4Go DDR : HD 2To : ATI HD4850 1Go DDR3 : SyncMaster 226bw
Pourquoi choisir GNU/Linux ? : Les commandes de base
Openbox : sur Ubuntu ou Debian, le tout en un script.

Hors ligne

#5 Le 23/09/2006, à 02:14

Sleeper

Re : [JavaScript] Application Web

Bebuntu a écrit :

Donc c'est la première fois que je travail avec de l'orienté objet

Euh ? a part l'utilisation des méthodes DOM, tu fais quedal en objet là hmm

Ca prouve bien que c'est la première fois.. lol mdr.. C'est quoi travailler en orienté objet ?

C'est pas => document.getElementsByTagName("a"); ... c'est ça le DOM big_smile

Dernière modification par Sleeper (Le 23/09/2006, à 02:15)


Intel Core i5 750 : 4Go DDR : HD 2To : ATI HD4850 1Go DDR3 : SyncMaster 226bw
Pourquoi choisir GNU/Linux ? : Les commandes de base
Openbox : sur Ubuntu ou Debian, le tout en un script.

Hors ligne

#6 Le 23/09/2006, à 12:21

Bebuntu

Re : [JavaScript] Application Web

Sleeper a écrit :
Bebuntu a écrit :

Donc c'est la première fois que je travail avec de l'orienté objet

Euh ? a part l'utilisation des méthodes DOM, tu fais quedal en objet là hmm

Ca prouve bien que c'est la première fois.. lol mdr.. C'est quoi travailler en orienté objet ?

C'est pas => document.getElementsByTagName("a"); ... c'est ça le DOM big_smile

Oui, le DOM a une structure d'objet et des méthodes lui sont associées telles que getElementsByTagName(); mais ton code en lui même n'est pas objet, c'est ce que j'entendais.

cf (par exemple) : http://www.digital-web.com/articles/objectifying_javascript/

Pour ton code, je testerai ça tout à l'heure.

Hors ligne

#7 Le 23/09/2006, à 21:33

Sleeper

Re : [JavaScript] Application Web

Bebuntu a écrit :

Pour ton code, je testerai ça tout à l'heure.

Merci c'est cool de m'aider..

Moi je pense que c'est parce que les deux variables ( var AttHref ) et ( var AttTitle ) sont remplacée à chaque fois par la boucle. Faudrait trouver un moyen de pouvoir créer à chaque fois une variable différente par tour de boucle et pouvoir les retrouver dans le window.open ... Un système d'incrémentation peut être ?

hmm


Intel Core i5 750 : 4Go DDR : HD 2To : ATI HD4850 1Go DDR3 : SyncMaster 226bw
Pourquoi choisir GNU/Linux ? : Les commandes de base
Openbox : sur Ubuntu ou Debian, le tout en un script.

Hors ligne

#8 Le 23/09/2006, à 22:12

Bebuntu

Re : [JavaScript] Application Web

Au fait, t'as bien mis this.getAttribute(...) et pas tagA[ i].getAttribute(...) ??

Hors ligne

#9 Le 23/09/2006, à 22:23

Sleeper

Re : [JavaScript] Application Web

big_smile:D:D T'es trop fort toi !!! Encore désolé je n'avait pas vu la petite modif en dehors du faite que t'avais déplacé les deux ligne. Tu peux me dire pourquoi on ne pouvait pas utiliser le tagA[ i] ? C'est parce que la variable n'étais pas accessible dans la nouvelle fonction ?

Merci beaucoup !!! wink


Intel Core i5 750 : 4Go DDR : HD 2To : ATI HD4850 1Go DDR3 : SyncMaster 226bw
Pourquoi choisir GNU/Linux ? : Les commandes de base
Openbox : sur Ubuntu ou Debian, le tout en un script.

Hors ligne

#10 Le 24/09/2006, à 00:00

Bebuntu

Re : [JavaScript] Application Web

Bah dans le for, ça fonctionne mais utilisé comme ça, ça prendra la dernière valeur de la boucle je crois.

Dans le onclick = ... il faut utiliser this parceque c'est un évenement.

vala vala.

Hors ligne

#11 Le 24/09/2006, à 00:01

Bebuntu

Re : [JavaScript] Application Web

c'est un peu pourri comme explication en fait big_smile

le mieux c'est encore de regarder un cours de JS wink

Hors ligne

#12 Le 24/09/2006, à 00:33

Sleeper

Re : [JavaScript] Application Web

C'est ce que je suis entrain de faire. big_smile J'apprend tout doucement..
Merci pour tes explications wink


Intel Core i5 750 : 4Go DDR : HD 2To : ATI HD4850 1Go DDR3 : SyncMaster 226bw
Pourquoi choisir GNU/Linux ? : Les commandes de base
Openbox : sur Ubuntu ou Debian, le tout en un script.

Hors ligne

#13 Le 24/09/2006, à 07:39

Sleeper

Re : [JavaScript] Application Web

Devinez quoi ? Sous IE le script ne fonctionne pas.. Fait chier.. pourquoi tout le monde n'utilise pas un navigateur respectueux des standards ???


Intel Core i5 750 : 4Go DDR : HD 2To : ATI HD4850 1Go DDR3 : SyncMaster 226bw
Pourquoi choisir GNU/Linux ? : Les commandes de base
Openbox : sur Ubuntu ou Debian, le tout en un script.

Hors ligne

#14 Le 24/09/2006, à 13:23

Bebuntu

Re : [JavaScript] Application Web

C'est ça qu'IE ne comprend pas je crois :
screen.height (et idem pour width)

Tu dois avoir un équivalent pour IE. Pour que ça fonctionne partout tu fais :

    var h = (screen.height) ? screen.height : LA_SYNTAXE_POUR_IE;
    var w = (screen.width) ? screen.width : LA_SYNTAXE_POUR_IE;
    var Top = (h-Hauteur)/2; // Position du PopUp en haut en px
    var Left = (w.width-Largeur)/2; // Position du PopUp à gauche en px

A priori ça fonctionnera (je suis pas certain à 100% pour le truc du width/height, mais à tous les coups c'est ça).

++

Hors ligne

#15 Le 24/09/2006, à 14:02

Sleeper

Re : [JavaScript] Application Web

J'ai essayé en supprimant carement cette partie du code mais rien n'y fait !!! Sous Firefox c'est tj ok sauf que le PopUp n'est plus centré donc normal !!!

Il implémente les méthodes du DOM IE ?

Dernière modification par Sleeper (Le 24/09/2006, à 14:04)


Intel Core i5 750 : 4Go DDR : HD 2To : ATI HD4850 1Go DDR3 : SyncMaster 226bw
Pourquoi choisir GNU/Linux ? : Les commandes de base
Openbox : sur Ubuntu ou Debian, le tout en un script.

Hors ligne

#16 Le 24/09/2006, à 15:13

Bebuntu

Re : [JavaScript] Application Web

Sleeper a écrit :

Il implémente les méthodes du DOM IE ?

Oui smile

Y a juste getAttribute('class') qu'il faut prendre avec précaution et le doubler avec un getAttribute('className')

File voir un exemple en ligne qu'on se rende mieux compte.

Hors ligne

#17 Le 24/09/2006, à 17:08

Sleeper

Re : [JavaScript] Application Web

Je n'ai rien en ligne pour l'instant. Et le je suis entrain de me battre avec les CSS tj à cause de IE (je le hais) ... Dés que je met en ligne je te fait signe en attendant j'ai pris l'ancienne solution pour tester.

<a href="javascript:popupFiche('fiche.php?id=sleeper','Sleeper')" title="Sleeper"> ... </a>

roll

Mais je compte bien trouver une solution pour éviter ça !!!

Dernière modification par Sleeper (Le 24/09/2006, à 17:08)


Intel Core i5 750 : 4Go DDR : HD 2To : ATI HD4850 1Go DDR3 : SyncMaster 226bw
Pourquoi choisir GNU/Linux ? : Les commandes de base
Openbox : sur Ubuntu ou Debian, le tout en un script.

Hors ligne

#18 Le 24/09/2006, à 17:43

Bebuntu

Re : [JavaScript] Application Web

<a href="javascript:popupFiche('fiche.php?id=sleeper','Sleeper')" title="Sleeper"> ... </a>

A PROSCRIRE !!!!!!!

Tout comportement JavaScript ne doit pas être essentiel au contenu, et aucun élément (HTML ou autre) ne doit apparaître s'il ne sert QUE pour le JS.

Typiquement, ton lien ne sert QU'au JS, JS inactivé, ton lien ne sert à rien à part perturber l'utilisateur.

Tu as bien un espace web où présenter tes essais na ? parceque là c'est plutôt obscur pour trouver ce qui cloche et tester.

++

Hors ligne

#19 Le 24/09/2006, à 18:33

Sleeper

Re : [JavaScript] Application Web

Je sais très bien que c'est pas la bonne solution mais ce n'est que pour tester en local.

De plus... http://forum.ubuntu-fr.org/viewtopic.php?pid=499954

Sleeper a écrit :

Hé hé !!! C'est la grande discution on dirait !!! Ne vous disputez pas les gars... lol

J'en ai marre, je m'arache les cheveux !!! Pas moyen d'inover avec des beau effet CSS, j'ai vais m'orienter vers deux feuilles de style, une pour tous les navigateur sauf IE et une autre pour IE !!! Ca ira encore plus vite que de passer deux heures sur un bête truc et de devoir supprimer des fonctionnalité au fur et à mesure..

C'est quand même grave d'en arriver à ce point là..

C'est ça ou je me remet à utiliser des tableau pour faire de la mise en page !!! C'est honteux !!!

Quel journée.. je n'aurais jamais du démarrer ma machine virtuel pour tester ça sous IE !!!

Enfin là comme je suis parti avec CSS.. je ne me préoccupe plus de IE.. J'adapterai la feuille de style après juste pour lui et à dieu les beau effet ca sera banal mais bon.. Je metterai un avertissement pour faire découvrir des navigateurs alternatifs.. Aussi non je suis toujours obligé d'adapter et je peux pas utiliser les CSS à fond !!! hmm


Intel Core i5 750 : 4Go DDR : HD 2To : ATI HD4850 1Go DDR3 : SyncMaster 226bw
Pourquoi choisir GNU/Linux ? : Les commandes de base
Openbox : sur Ubuntu ou Debian, le tout en un script.

Hors ligne

#20 Le 26/09/2006, à 09:06

mccricri

Re : [JavaScript] Application Web

Au lieu de :

if (TagA[i].getAttribute("class") == AttClass)

tu peux faire plutôt :

if (TagA[i].className == AttClass)

Chez moi, ça semblait fonctionner.

Hors ligne

#21 Le 26/09/2006, à 10:16

Sleeper

Re : [JavaScript] Application Web

Hé hé !!! C'est magique !!! big_smile

Merci bcp pour à vous deux Bebuntu et mccricri, mon script fonctionne à présent !!!


Intel Core i5 750 : 4Go DDR : HD 2To : ATI HD4850 1Go DDR3 : SyncMaster 226bw
Pourquoi choisir GNU/Linux ? : Les commandes de base
Openbox : sur Ubuntu ou Debian, le tout en un script.

Hors ligne

#22 Le 26/09/2006, à 15:44

Bebuntu

Re : [JavaScript] Application Web

mccricri a écrit :

Au lieu de :

if (TagA[i].getAttribute("class") == AttClass)

tu peux faire plutôt :

if (TagA[i].className == AttClass)

Chez moi, ça semblait fonctionner.

Oui mais non big_smile

Autant utiliser DOM jusqu'au bout et utiliser ce dont je parlais plus haut à savoir redoubler la syntaxe pour IE

if (TagA[i].getAttribute('class') == AttClass || TagA[i].getAttribute('className') == AttClass) { ... }

Hors ligne

#23 Le 27/09/2006, à 12:47

mccricri

Re : [JavaScript] Application Web

Autant utiliser DOM jusqu'au bout et utiliser ce dont je parlais plus haut à savoir redoubler la syntaxe pour IE

oui, mais non aussi tongue
Tant qu'à faire du JS, pourquoi ne pas utiliser les propriétés des objets JS qui font justement le pont entre les 2 mondes ?
Moi, dans Firefox il y a l'explorateur DOM qui permet de voir aussi les propriétés JS des noeuds du DOM, donc je vois pas pourquoi on pourrait pas l'utiliser. Parce que dans ce cas, le "vrai" attribut du tag c'est bien class et pas classname. Et ce dernier ne devrait pas être disponible via la méthode getAttribute().

Et puis, tant qu'à faire du beurk pour IE (qui apparement ne respecte pas le DOM puisqu'il créerait des attibuts fictifs), pq essayer de faire du propre tongue

En réalité, c'est pour celà qu'il existe maintenant des librairies JS qui permettent de ne plus se prendre la tête avec des différences entre navigateur. La mode Ajax aura eu du bon à ce niveau là...

Hors ligne

#24 Le 27/09/2006, à 15:48

Bebuntu

Re : [JavaScript] Application Web

mccricri a écrit :

Et puis, tant qu'à faire du beurk pour IE (qui apparement ne respecte pas le DOM puisqu'il créerait des attibuts fictifs), pq essayer de faire du propre tongue

Tu utilises le même argument que moi mais pour dire le contraire !! comme quoi wink

C'est plus propre de faire avec les méthodes DOM et donc, tant pis pour IE ou un poil d'adaptation smile

Enfin, c'est comme ça que je le vois

mccricri a écrit :

En réalité, c'est pour celà qu'il existe maintenant des librairies JS qui permettent de ne plus se prendre la tête avec des différences entre navigateur. La mode Ajax aura eu du bon à ce niveau là...

mwui... une lib de 4583305 ko, bof bof hein ! pas que du bon... à part peut être jquery

Hors ligne