Le TwiBlog

The one with Twidi

Aller au contenu | Aller au menu | Aller à la recherche

mardi 15 novembre 2005

Javascript et IE : document.createElement('input') et document.forms['the_form'].elements['the_input']

J'ai découvert un petit bug dans IE6 (celui qui dit "un de plus"... ben il le dit... ).

Sur un site développé pour un client (celui dont je parlais il y a peu), j'ai une partie en javascript. On peut, en cliquant sur un bouton, ajouter des lignes de formulaire.

Voici une partie du code :

var input_mail = document.createElement('input');
input_mail.setAttribute('name', 'mail2');
input_mail.setAttribute('id', 'step3_mail2');
input_mail.className = 'step3_mail_input';
...
a_div_in_the_form.appendChild(input_mail);

Donc ajout classique d'un élément via le DOM.

Plus tard, j'ai un onsubmit sur le formulaire dans lequel j'effectue une validation.

Je veux donc pouvoir accéder au nouveau champs pour tester son contenu

Je fais donc, très logiquement

var input = documents.forms['the_form'].elements['mail2'];

Et bien pour IE6, impossible, l'élément n'existe pas. Pourtant quand on parcoure le tableau avec des index numériques, on trouve bien l'élément avec name = 'mail2'. J'ai aussi essayé avec l'id plutôt que le name, mais rien à faire. La création de l'élément n'a pas correctement mis à jour le tableau elements.

Pour éviter de refaire tout mon code, j'ai créé une petite fonction qui renvoie une table de hashage qui, pour chaque nom du tableau, me donne son index.

function el_id_by_name(el) {
	var els = new Array();
	for (i=0;i<el.length;i++) {
		if (el[i].name) {
			els[el[i].name] = i;
		}
	}
	return els;
}

Et mon code précédent devient

var els = el_id_by_name(document.forms['the_form'].elements);
var input = document.forms['the_form'].elements[els['mail2']];

Notez le remplacement de elements['mail2'] par elements[els['mail2']]

Voilà ;)

lundi 14 novembre 2005

gettext et php : choses à savoir

J'ai développé pour un client un site multi-langues. La bonne façon de faire est bien sûr d'utiliser gettext. Or, sans parler du fait que c'était pour moi la première fois que je touchais à cet utilitaire, j'ai du batailler pour arriver à un résultat correct avec PHP.

Donc au final j'ai noté deux points importants pour le bon fonctionnement de gettext+php

  • il faut que les locales de chaque langue utilisée soient installées (par exemple sous debian via dpkg-reconfigure locales
  • il faut redémarrer apache après chaque génération du fichier .mo

Ca n'a peut-être l'air de rien comme çà, mais j'ai passé des heures à comprendre pourquoi ça ne marchait pas...

Lien : un article facile d'accès (mais en anglais) pour commencer avec gettext et php