Je poursuis ce fil, malgré que le sujet ne soit pas le meme !
J'ai continué à scripter, et j'ai du mal avec certains aspects.
D'abord, je n'arrive pas à créer des objets avec Eval ! [var eval('o-'id) = new obj();]
Il semble que j'ai un problème de référence à mes objets, et j'ai essayé avec getElementById, sans résultats !
Voici le code :
// --------------------------------------------------------
// Fonction de gestion des inputs textes pour les variables
// --------------------------------------------------------
var objInput = function () {}
objInput.prototype.create = function (
noeud, // ID de la cellule ou doit se placer le champ
identifier, // identifierifiant du champ
defaultValue, // Valeur par défaut
minValue, // Valeur mini
maxValue, // Valeur maxi
interval // Pas des +/-
)
{
//-----------------------------------
// Création d'un input text
this.champ=document.createElement('input');
this.champ.setAttribute('type','text');
this.champ.setAttribute('name',identifier);
this.champ.setAttribute('value',defaultValue);
//-----------------------------------
// Vérifie les valeur soumise au champ
this.champ.onchange = function()
{
if (this.value == '' || !parseFloat(this.value) || this.value < minValue || this.value > maxValue)
{
this.style.borderColor = 'red';
}
}
//-----------------------------------
// Applique le style au focus
this.champ.onfocus = function()
{
this.style.borderColor = 'black';
tips(document.getElementById('tips'),"Type a value between "+minValue+" and "+maxValue);
}
//-----------------------------------
// Gestion des touches fléchées
if(window.event) // If = IE
{
this.champ.onkeypress = function(event){
if (event.keyCode == "40")
{
if (parseFloat(this.champ.value-interval) >= minValue)
this.champ.value -= interval;
}
else if (event.keyCode == "38")
{
if (parseFloat(this.champ.value+interval) <= maxValue)
this.champ.value = parseFloat(this.champ.value) + parseFloat(interval);
}
}
}
else // If != IE
{
this.champ.onkeydown = function(event){
if (event.keyCode == "40")
{
if (parseFloat(this.champ.value-interval) >= minValue)
this.champ.value -= interval;
}
else if (event.keyCode == "38")
{
if (parseFloat(this.champ.value+interval) <= maxValue)
this.champ.value = parseFloat(this.champ.value) + parseFloat(interval);
}
}
}
//-----------------------------------
// Création d'un bouton moins
this.btMoins=document.createElement('img');
this.btMoins.setAttribute('src','images/less.gif');
this.btMoins.setAttribute('alt','decrease value');
// Gestion du clic
this.btMoins.onclick = function()
{
if (parseFloat(this.champ.value-interval) >= minValue)
this.champ.value -= interval;
}
//-----------------------------------
// Création d'un bouton plus
this.btPlus=document.createElement('img');
this.btPlus.setAttribute('src','images/more.gif');
this.btPlus.setAttribute('alt','increase value');
// Gestion du clic
this.btPlus.onclick = function()
{
if (parseFloat(this.champ.value+interval) <= maxValue)
this.champ.value = parseFloat(this.champ.value) + parseFloat(interval);
}
//-----------------------------------
// Ajout des éléments précédents dans le code HTML
document.getElementById(noeud).appendChild(this.btMoins);
document.getElementById(noeud).appendChild(this.champ);
document.getElementById(noeud).appendChild(this.btPlus);
//-----------------------------------
}
var o = new objInput();
o.create(noeud,identifier,defaultValue,minValue,maxValue,interval);
Je sais, je n'ai pas utilisé de librairies... Je dirait même que j'ai codé de l'actionscript.
je créer un 30 aine d'objets par page. Lorsque je ne fais pas en proto (sans les this etc...) ca les affiche tous, mais tous les évènements se répercutent sur le dernier objet (normal).
Là, en objet, il les affiche bien, mais ce sont les évènements qui ne sont pas bons (this.champ has no properties), je vois pas comment faire pour faire passer la référence. Faut-il que je créer une fonction du prototype pour chaque évènement (comme dans tes exemples), un peu comme les écouteurs en As ?
Je ne suis pas certains d'avoir été très clair :s
Merci de votre attention
Modifié par warry (15 May 2008 - 16:47)