1

背景: jQuery検証スクリプトがあります。これはほとんどすべてのWebページで使用されており、クライアント側の検証が可能です(サーバー側の検証も行います)。javascriptは、各フォームの特定の「ルール」を除いて、すべてのページで同じです。

各ページのルールは、HTMLページをレンダリングする前に、コントローラーからphp変数$jquery_validationに挿入されます。これは、適切なクライアント側の検証ルールを使用して、各htmlページとフォームを動的に生成できることを意味します。

以下は、現在すべてのHTMLページにロードされているJavaScriptコードです。

$(document).ready(function(){
      $('#signupform').validate({
           wrapper: 'span class="error"',
           meta: 'validate', 
           highlight: function(element, errorClass, validClass) {
               if (element.type === 'radio') {
                      this.findByName(element.name).addClass(errorClass).removeClass(validClass);
              } else {
                      $(element).addClass(errorClass).removeClass(validClass);
               }

              var error = $(element).parent().find('span.error');       
                error.show();     
            },

             unhighlight: function(element, errorClass, validClass) {
              if (element.type === 'radio') {
                this.findByName(element.name).removeClass(errorClass).addClass(validClass);
              } else {
                $(element).removeClass(errorClass).addClass(validClass);
              }

              $(element).parent().find('span.error').hide(0, function() {
                $(element).parent().find('span.valid').fadeIn(200);
              });
            },
            <?=$jquery_validation?>);});

</script>

最後の$jquery_validation変数には、各ページの「ルール」が含まれています。これは、フォームによって明らかに異なります。それが与える出力の例は次のとおりです。

 "rules":{"username":{"required":true,"remote":{"url":"http:\/\/localhost\/mytest\/public_html\/welcome\/remote","type":"post"}},"onkeyup":false});});

関数は現在機能しており、すべてが良好です。

質問:検証javascript関数を.jsファイルに含める方法はありますか(圧縮などが可能です)、それでも各ページの検証の「ルール」セクションを動的にロードしますか?

必要に応じて、$ jquery_validationの「出力」と構文を変更できますが、重要なのは、各ページのルールを動的に出力できる必要があるということです。

4

5 に答える 5

2

または、次のようにすることもできます。

var _pageValidationRules = <?php echo $jquery_validation; ?>

// Code below can be compressed
$(function() {
    $('#signupform').validate({
        wrapper: 'span class="error"',
        meta: 'validate',
        highlight: function(element, errorClass, validClass) {
            // ...
        },
        unhighlight: function(element, errorClass, validClass) {
            // ...
        }
        rules: _pageValidationRules
    });
});​
于 2012-04-17T05:45:20.290 に答える
1

JavaScript コードを任意の.jsファイルに配置して圧縮し、HTML ページ内のデータを操作できます。2 つが同じファイルにある必要はありません。コードがロード時に実行される場合は、コードがページに定義された後にコードが最初に実行されるようにする必要があります。これは、コードがページに挿入された後にコードを物理的に配置するか、ページがロードされるのを待ってから実行します。コード。

于 2012-04-17T05:39:21.287 に答える
1

はい、オブジェクトを作成して変数に保存し、詳細をコンストラクターに保存できます (JS で何と呼ばれているか思い出せません)。

これは、スクリプトの 1 つで使用する例です。

var rmlsSearch = function(searchEndpoint) {

  this.fname = '';
  this.lname = '';
  this.searchEndpoint = searchEndpoint;
  this.resultTemplate = $('#rmls-search-result-template').html();

  //Preform inital search
  this.searchAgent();

  //Bind search function to search button
  $('#rmls-search-button').one('click', $.proxy(this.searchAgent, this));

};

それを定義すると、必要な場所でインスタンス化し、必要な詳細を渡すことができます。

var rmlsHandle = rmlsSearch("some endpoint I'm planning on using");

オブジェクトにプロトタイプ化された検索エージェント関数:

rmlsSearch.prototype.searchAgent = function(){

  //Get the agent details from the form on the page
  this.getAgentDetails();

  //... Whatever else you'd need to do in the function
};
于 2012-04-17T05:40:16.443 に答える
1

動的コンテンツを実行するには、ブラウザーで PHP をレンダリングする必要があります。したがって、PHP を外部の js ファイルに入れようとしても読み取られません。

于 2012-04-17T05:42:43.463 に答える
1
  • 検証ルールを JSON 形式で返す PHP スクリプトを作成します。
  • スクリプトタグを使用してそのスクリプトをロードします。これはPHPファイルの可能性があります(パフォーマンスを向上させるために、正しいHTTPキャッシュ設定を設定して、ブラウザキャッシュに残ります)
  • 外部 JS 静的ファイルから検証ロジックを読み込む
于 2012-04-17T05:58:50.547 に答える