11496 sujets

JavaScript, DOM et API Web HTML5

Bonjour

Je trouverai bien pratique de créer des attributs personnalisés par exemple :

<input type='text' fieldtype='num' id='surface' value='100'>

et de récupérer l'attribut utilisateur 'fieldtype' par un :

$("surface").data ("fieldType")

Mais ça ne fonctionne pas (sous IE comme sous Firefox)

Quelqu'un a eu une idée pour définir des attributs externes au DOM directement en HTML et les récupérer avec JQuery sans les avoir créé au préalable avec JQuery. Exemple : data ("fieldType", "num").

Merci
Quand on crée des attributs, on utilise des attributs standards. Smiley cligne

Dons ton cas une simple class aurait suffit :

<input type="text" class="field-num" id="surface" value="100" />


Mais je ne vois pas bien ce que tu veux faire avec cette fonction data… Smiley ohwell Ça sert à quoi? Smiley sweatdrop
Merci pour ta réponse
Voila ce que je voudrais faire :

Pour chaque champ de saisie présent dans un formulaire, je voudrais leur attribuer un modèle de saisie afin d'en vérifier le contenu automatiquement par une unique fonction générale appelé à la validation du formulaire
Exemples de ces "attributs" inconnus du DOM (expandos) :
- Type de champ : numérique entier, numérique flottant, alphanumérique, date, heure, ...
- valeurs mini et maxi pour les champs numériques
- nombre de digits après la virgule pour les valeurs flottantes.
...

Pour que ce soit plus "lisible"et plus logique (enfin, je pense), j'aimerais voir ces "attributs" fixés dans la ligne HTML <input type='text'...>

Une autre solution sinon ?
Merci pour ta réponse
Voila ce que je voudrais faire :

Pour chaque champ de saisie présent dans un formulaire, je voudrais leur attribuer un modèle de saisie afin d'en vérifier le contenu automatiquement par une unique fonction générale appelé à la validation du formulaire
Exemples de ces "attributs" inconnus du DOM (expandos) :
- Type de champ : numérique entier, numérique flottant, alphanumérique, date, heure, ...
- valeurs mini et maxi pour les champs numériques
- nombre de digits après la virgule pour les valeurs flottantes.
...

Pour que ce soit plus "lisible"et plus logique (enfin, je pense), j'aimerais voir ces "attributs" fixés dans la ligne HTML <input type='text'...>

Une autre solution sinon ?
Modifié par baccochr (11 Apr 2009 - 13:38)
Ben utilise des class, comme tu peux en mettre plusieurs :

<input type="text" class="field-type-date field-date-max-2011" id="surface" value="100" />


Etc, je ne sais pas si c'est la meilleure méthode mais en tout cas c'est valide. Smiley cligne

Edit : il y a aussi le plugin metadata qui sert à ça Smiley cligne
Modifié par Patidou (11 Apr 2009 - 15:03)
Bon j'ai fini par définir les "attributs" personnalisés de mes champs de saisie avec la fonction JQuery data()
exemple :


$(document).ready(function()
{
$("#titre").data ("notnull", "true");
$("#surface").data ("notnull", "true").data("type", "integer").data("min", "1");
$("#surface_2").data ("notnull", "true").data("type", "integer").data("min", "1");
"1").data("max", "99999");
$("#prix").data ("notnull", "true").data("type", "integer").data("min", "1000");
$("#descriptif").data ("notnull", "true");
}


Je ne définis rien de plus dans mes tags HTML du formulaire.
Finalement je trouve ça presque aussi propre : toutes les définitions des contrôles de saisie sont faites au même endroit.

Puis ma fonction de contrôle de saisie du formulaire gère tout derrière de façon automatique :


$("textarea:visible,input:text:visible").each(function() {
var item = $(this);
var val = jQuery.trim (item);

// -- vérifie si le champ est vide
if (item.data ("notnull") == "true")
if (val == "")
return Forms_InputError (item, "Zone de saisie obligatoire !");

// -- vérifie si le champ est numérique entier
if (item.data ("type") == "integer")
if (! ( /^-{0,1}\d*$/.test(val) ) )
Forms_InputError (item, "Cette zone de saisie doit contenir une valeur numérique entière");

etc...


Je ne sais pas si c'est moins propre ou moins performant que d'utiliser les classes dans le tag HTML .
ça évite en tout cas de rajouter une plugin (metadata) pour un principe similaire.