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);
                        });

但是对于第二个“errr”,我尝试了这些行:

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

它不起作用!

我发现这对我来说有点复杂。请任何建议?

4

3 回答 3

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 回答
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

我认为您缺少 json 的部分要点。如果您想要各种必填字段,则应该只使用一个名为 required 的 json 数组。

{
   "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 回答