J'ai un formulaire utilisant jQuery 1.7 et jQuery validation 1.9 (le plus récent au moment de cet article), qui fonctionne sur firefox / chrome / safari, mais ne fonctionne que partiellement sur I.E. (8.0 au moins, je n'ai pas testé d'autres versions) - je ne sais pas quel est le problème. Il y a un exemple ici: http://jsfiddle.net/bulbous/hZn5A/100/

Si vous cliquez sur Tester, vous voyez que le contrôle de saisie de texte est validé dans tous les navigateurs, mais la liste déroulante n'est pas validée dans (c'est-à-dire dans tous les autres). J'inclus également le html complet pour l'exemple ci-dessous:

<head>
    <script src="jquery-1.7.js" type="text/javascript"></script>
    <script src="jquery.validate-1.9.js" type="text/javascript"></script>
</head>
<body>
<script type="text/javascript">
$(document).ready(function() {
  jQuery.validator.addMethod("notEqual", function(value, element, param) {
      return this.optional(element) || value != param;
  }, "Please choose some value!");

  $('#myForm').validate({
      rules: {
          text: {
              required: true
          },
          category: {
              required: true,
              notEqual: "---"
          }
      },
      messages: {
          text: {
              required: "Text required"
          },
          category: {
              required: "Category required"
          }
      }
  });
});
    </script>
<form id="myForm">
    <select id="category" name="category">
        <option>---</option>
        <option>Category 1</option>
        <option>Category 2</option>
        <option>Category 3</option>
    </select>
    <input type="text" id="text" name="text" />
    <input type="submit" value="Test" />
</form
</body>
</html>
2
Kem Mason 9 nov. 2011 à 22:12

5 réponses

Meilleure réponse

Si vous attribuez aux balises <option> des attributs "valeur" explicites, cela fonctionne.

<option value='---'>---</option>

Je ne comprends pas pourquoi il échoue dans IE7 mais pas IE8.

5
Pointy 9 nov. 2011 à 18:23

Vous utilisez le mot "texte" pour vos id et name.

Le mot "texte" n'est pas spécifiquement "réservé" mais c'est l'un de ces "mots à éviter" ...

http://www.kourbatov.com/faq/reserved.htm


De plus, le plug-in de validation n'a été testé que jusqu'à jQuery version 1.6.1

Rétrogradez votre version de jQuery juste pour exclure un problème avec jQuery 1.7

1
Sparky 9 nov. 2011 à 18:31

Suppose que cela devrait fonctionner

<html>
<head>
    <script src="jquery-1.7.js" type="text/javascript"></script>
    <script src="jquery.validate-1.9.js" type="text/javascript"></script>
</head>
<body>
<script type="text/javascript">
$(document).ready(function() {
    $('#myForm').validate({
      rules: {
          text: {
              required: true
          },
          category: {
              required: true
          }
      },
      messages: {
          text: {
              required: "Text required"
          },
          category: {
              required: "Category required"
          }
      }
  });
});
    </script>
<form id="myForm">
    <select id="category" name="category">
        <option value="">---</option>
        <option value="Category 1">Category 1</option>
        <option value="Category 2">Category 2</option>
        <option value="Category 3">Category 3</option>
    </select>
    <input type="text" id="text" name="text" />
    <input type="submit" value="Test" />
</form
</body>
</html>
0
xgencoder 9 nov. 2011 à 18:34

C'est parce qu'aucune de vos options n'a de valeur.

    <option value='---'>---</option>
    <option value='Category 1'>Category 1</option>
    <option value='Category 2'>Category 2</option>
    <option value='Category 3'>Category 3</option>
2
James 9 nov. 2011 à 18:27

Semble être un bug de validateur. Mais en guise de solution, vous pouvez envisager de sélectionner l'élément et d'obtenir la valeur. Voir ceci, en travaillant sur IE7:

jQuery.validator.addMethod("notEqual", function(value, element, param) {
    return this.optional(element) || $(element).val() !== param;
}, "Please choose some value!");
4
Abdul Munim 9 nov. 2011 à 18:24