Ces temps-ci, j'ai mis le nez dans plusieurs formulaires dynamiques où j'ai eu à convertir le vieux code JavaScript vers Prototype (technologie imposée, pour être franc, j'y aurais préféré jQuery). À force de faire du travail répétitif, lorsqu'est venu le temps de tester, je me suis rendu compte que j'avais involontairement fait une erreur d'inattention, la même, qui se retrouvait sur chacun des formulaires. À chaque fois, Firebug annonçait :
J is null
var Prototype={Version:"1.6.0.3",Browser...totype,Enumerable);Element.addMethods();
Comme j'utilisais une version compressée de la librairie (YUI Compressor), l'erreur était détectée à la ligne 1. Je n'ai pas vraiment eu le choix d'exécuter mon code à nouveau en utilisant la version décompressée, ce qui me permit d'obtenir la ligne exacte où ça plantait.
Ligne 3936
element is null
if (element._prototypeEventID) return element._prototypeEventID[0];
Quel indice est-ce que ça me donnait ? Firebug me disait que ça plantait dans la librairie Prototype, et pourtant pas dans mes appels. Après avoir essayé de figurer où pouvait être le bogue, j'en ai déduit que ça se produisait alors que j'essayais d'attacher un événement à un élément inexistant. En effet, j'avais fait la gaffe de placer un attribut name plutôt que id, alors Prototype a réagit comme si le champ n'existait pas, d'où le message element is null.
Si vous rencontrez cette erreur, assurez-vous que vous avez bien identifié tous vos éléments avec un ID. Et si vous développez un formulaire qui sera traité par un langage dynamique (comme PHP), n'oubliez pas que chaque champ doit aussi porter un nom (name) car celui-ci sera utilisé du côté serveur pour récupérer les données une fois le formulaire soumis.
En passant, après plus d'un an d'attente, une lueur d'espoir... La prochaine version de Prototype 1.6.1 est présentement en Release Candidate (RC2). Les ajouts serviront à fixer quelques bogues, entre autre ceux liés à IE 8, et de bonifier avec quelques fonctionnalités mineures supplémentaires. Au moins, le projet est encore en vie.
jeudi 2 avril 2009
1 réponse à "J is null dans Prototype"
S'abonner à :
Publier des commentaires (Atom)
Merci pour l'info !!
Je bloquais sur le même message d'erreur. Le problème était un champ dans l'id était au pluriel (avec s final) et la référence en javascript/prototype au singulier. A une lettre près, tout le code javascript de la page &tait inutilisable.
Ces fichus messages d'erreur qui ne localisent pas la source !
Encore merci ;-)
devjav