4

J'ai déjà réussi à faire fonctionner le plugin de validation jQuery avec RequireJs. J'essaye maintenant de placer les paramètres par défaut de validation de jquery afin qu'il ne valide pas les champs enveloppés dans une balise avec un attribut de data-prefix (ceci est fait dans le fichier Page1.js). Toutefois, lorsque vous cliquez sur le bouton Envoyer, il tente de valider les deux champs.RequireJS avec jQuery Validation - Définir les paramètres par défaut

Voici le code (la question initiale liée à une démonstration plus complexe):

<!DOCTYPE html> 
<html> 
<head> 
    <title>Test</title> 
    <meta charset="utf-8" /> 
    <script src="http://ajax.cdnjs.com/ajax/libs/require.js/2.1.5/require.js"></script> 
    <script> 
     require.config({ 
      paths: { 
       'jquery': 'http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.8.3', 
       'jquery.validate': 'http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate', 
       'jquery.validate.unobtrusive': 'http://ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.validate.unobtrusive' 
      }, 
      shim: { 
       'jquery.validate': ['jquery'], 
       'jquery.validate.unobtrusive': ['jquery', 'jquery.validate'] 
      } 
     }); 

     require(['jquery', 'jquery.validate', 'jquery.validate.unobtrusive'], function($) { 
      $.validator.setDefaults({ 
       ignore: '[data-js-val-prefix] *' 
      }); 
     }); 
    </script> 
</head> 
<body> 
    <form> 
     <div class="validation-summary-valid" data-valmsg-summary="true"><span>Please correct the errors and try again.</span> 
      <ul><li style="display:none"></li></ul> 
     </div> 
     <fieldset> 
      <legend>Include</legend> 
      <input name="Include" type="text" required /> 
     </fieldset> 
     <fieldset data-js-val-prefix="Exclude"> 
      <legend>Exclude</legend> 
      <input name="Exclude" type="text" required /> 
     </fieldset> 
     <p><button type="submit">Submit</button></p> 
    </form> 
</body> 
</html> 

Je ne suis pas en utilisant les versions minified des bibliothèques qu'il peut aider lors du débogage.

J'apprécierais l'aide. Merci

Edit:

Si vous modifiez le bloc de script à une des conditions suivantes, il fonctionne très bien.

Sans RequireJs:

<script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.8.3.js"></script> 
<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.js"></script> 
<script src="http://ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.validate.unobtrusive.js"></script> 
<script> 
    $.validator.setDefaults({ 
     ignore: '[data-js-val-prefix] *' 
    }); 
</script> 

Sans JavaScript Discret:

<script> 
    require.config({ 
     paths: { 
      'jquery': 'http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.8.3', 
      'jquery.validate': 'http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate' 
     }, 
     shim: { 
      'jquery.validate': ['jquery'] 
     } 
    }); 

    require(['jquery', 'jquery.validate'], function($) { 
     $.validator.setDefaults({ 
      ignore: '[data-js-val-prefix] *' 
     }); 

     $(function() { 
      $('form').validate(); 
     }); 
    }); 
</script> 

Cela me donne à penser qu'il ya un problème avec la bibliothèque de validation discrète et RequireJs ensemble. Je suis sûr que je fais quelque chose d'anormal.

+0

Veuillez inclure le code dans votre question. Sinon, après que cela soit résolu et que votre démo soit partie, ceci est inutile pour les futurs lecteurs. – Sparky

+0

Je vais modifier la question une fois que je supprime la démo. J'ai commencé à l'écrire, mais il est devenu laid et a pensé qu'il pourrait distraire quiconque souhaite aider. – nfplee

+1

Alors, où est votre code '.validate()'? Je pense vraiment que ce serait mieux pour vous de montrer le code pour votre exemple concis dans la question. – Sparky

Répondre

7

J'ai répondu à ma propre question avec l'aide de @Sparky. Le problème survient parce que le fichier jquery.validate.unobtrusive connecte la méthode validate, si vous dites alors $ .validator.setDefaults dans la fonction de rappel, il aurait déjà câblé la validation et il sera ignoré. Si vous remplacez le bloc de script require par le suivant:

require(['jquery', 'jquery.validate'], function($) { 
    $.validator.setDefaults({ 
     ignore: '[data-js-val-prefix] *' 
    }); 

    require(['jquery.validate.unobtrusive']); 
}); 

Tout est dandy. J'espère que ça aide.

Questions connexes