2

私はこのフォームを持っています:

<form>

    <p>
      <label for="field_userAddress">Adresse (*)</label>
      <input type="text" name="userAddress" id="field_userAddress"  />
    </p>
    <p>
      <label for="field_userCP">CP (*)</label>
      <input type="text" name="userCP" id="field_userCP"  />
    </p>
    <p>
      <label for="field_vars[1]">vars one (*)</label>
      <input type="text" name="vars[1]" id="field_uservars[1]"  />
    </p>
    <p>
      <label for="field_vars[2]">Vars two (*)</label>
      <input type="text" name="vars[2]" id="field_vars[2]"  />
    </p>


</form>

そして、AJAXを使用してフィールドを制御したいので、php側で作業を行い、最終的にJQueryを使用してjson文字列を次のように要求します:

{
    "status": 0,
    "err": {
        "userAddress": "required",
        "userCP": "required"
    },
    "errr": {
        "vars": {
            "1": "required",
            "2": "required"
        }
    }
}

問題のフィールドの前にすべてのメッセージを表示したい。

したがって、最初の「エラー」については、これらの行を使用しましたが、機能します。

$.each(r.err,function(k,v)
                        {
                            form.find('[name='+k+']').closest('p').append(v);
                        });

しかし、2番目の「エラー」については、これらの行を試しました:

$.each(r.errr.vars,function(y,z)
                        {
                            form.find('[name="'+y+'['+z+']"'+']').closest('p').append(z);
                        }); 

うまくいきません!

これは私にとって少し複雑であることがわかりました。アドバイスをお願いします。

4

3 に答える 3

0

jsonの要点の一部が欠けていると思います。さまざまな必須フィールドが必要な場合は、代わりに、required という json 配列を 1 つだけ持つ必要があります。

{
   "err": {
     "required": ["userAddress", "userCP"]
   },

   "errr": {
     "vars": {
       "required": ["1", "2"];
     },
   }
}

そして、これを解析したい場合

$.each( r.err, function(k,v) { $('form[name='+ v +']').closest('p').append(k); });

于 2012-11-17T19:26:00.863 に答える
0

[]jQuery セレクター エスケープ ルールごとに、名前の一部であるをエスケープする必要があります。

これはうまくいくはずです:

$.each(r.errr.vars,function(y,z) {
        form.find('input[name="vars\\['+y+'\\]"]').closest('p').append(z);
}); 

API ドキュメントhttp://api.jquery.com/category/selectors/

エスケープに関する最初の段落を読む

于 2012-11-17T19:42:02.540 に答える
0

ID を使用して特定の入力フィールドをターゲットにし、エラー メッセージを渡すことをお勧めします。id 属性で [] を使用する代わりに、次のようなことをお勧めします。

HTML:

<form>
    <p>
      <label for="field_userAddress">Adresse (*)</label>
      <input type="text" name="userAddress" id="field_userAddress"  />
    </p>
    <p>
      <label for="field_userCP">CP (*)</label>
      <input type="text" name="userCP" id="field_userCP"  />
    </p>
    <p>
      <label for="field_vars_1">vars one (*)</label>
      <input type="text" name="vars[1]" id="field_vars_1"  />
    </p>
    <p>
      <label for="field_vars_2">Vars two (*)</label>
      <input type="text" name="vars[2]" id="field_vars_2"  />
    </p>
</form>​

JavaScript:

$.each(r.errr.vars,function(y,z) {
    form.find('input#field_vars_'+y).parent().append('<span>'+z+'</span>');
});

うまく動作します。// http://jsfiddle.net/bbSw9/

于 2012-11-17T20:00:49.140 に答える