2010-07-25 6 views
14

J'ai un formulaire où l'utilisateur doit cliquer sur un lien, sélectionner un utilisateur via une fenêtre contextuelle qui remplit ensuite un champ caché avec un ID et un champ d'affichage avec le nom d'utilisateur.jQuery - Puis-je valider un champ désactivé?

Le champ d'affichage est défini sur disabled = "disabled" pour forcer l'utilisateur à utiliser le menu contextuel et ne pas entrer de valeur dans le champ.

Je dois m'assurer que l'utilisateur sélectionne un nom. J'utilise jQuery et le plugin de validation de Jorn.

Faire un requis: vrai sur le champ désactivé ne semble pas se déclencher si la valeur est vide.

Des idées pour résoudre ce problème?

+0

Si le i champ s juste pour l'affichage ne pouvez-vous pas simplement effacer l'ID dans le caché? Pourquoi même utiliser une zone de texte pour un champ d'affichage seulement. Utilisez simplement jQuery pour écrire sur un span ou un div. L'utilisateur ne pense pas qu'il puisse éditer le texte et vous n'êtes pas en train d'essayer de valider quelque chose qui ne devrait pas avoir d'importance. – ahsteele

+0

Pourquoi ne pas valider le champ caché pour vérifier qu'il a un ID dedans? – Matt

Répondre

27

Au lieu de le rendre désactivé, avez-vous essayé de le rendre en lecture seule?

<input type="text" readonly="readonly" /> 

Je me souviens il y a des années que les champs handicapés ne sont pas soumis par des formes, et par conséquent, ne sont probablement pas validés

Voici le W3C HTML4 Spec sur le sujet.

+0

Excellent !! Je ne savais même pas que readonly existait. Est-ce compatible avec tous les navigateurs? – Falantar014

1

pourquoi ne pas permettre à juste befor validation puis le désactiver à nouveau ... en utilisant le .attr('disabled','') pour lui permettre et .attr('disabled','disabled') de le désactiver à nouveau, il se passera si vite que vous ne remarquerez même plus il.

2

Selon la suggestion précédente, la solution pourrait être:

var _valid = $.fn.valid; 
$.fn.valid = function (alsoDisabled) { 
    var alsoDisabled = alsoDisabled || false; 
    if (alsoDisabled) { 
     this.find('[disabled]').prop('disabled', false); 
    } 
    var retVal = _valid.apply(this); 
    if (alsoDisabled) { 
     this.find('[disabled]').prop('disabled', true); 
    } 
    return retVal; 
}; 


et vous pouvez donc appeler la méthode valide avec les arguments optionnels: $('#form').valid(true) pour vérifier le terrain également désactivé ou $('#form').valid() pour la normale comportement

meilleures salutations Gaetano

Questions connexes