我从我的验证CFC返回一个JSON,它包含一系列被发现错误的字段。
{"error":1,"fields":["first_name","email","last_name","comments"]}
我正在使用jquery post方法,但是当我返回数据时,我无法根据json中的字段创建标签。
$.each(data.fields, function(){
$("#" + this + "\"").append("<label class='error' for='" + this + "'>Please check your input</label>")
但这似乎不起作用。我做错了什么?
另外,我使用的是jquery验证插件,但我也需要使用服务器端验证。我已经禁用了验证器。
答案 0 :(得分:1)
两件事:
您需要将两个参数传递给each
。 this
将返回一串数组。因此,请考虑我正在记录this
并将parameters
传递给each
。
$.each(data.fields, function (key, value) {
console.log("when this is used - a string array: ",this);
console.log("value (parameter passed to each) is used - string : ", value);
});
以下代码的控制台输出(当“comments”字符串在范围内时)
更多信息,请访问docs:http://api.jquery.com/each/
$("#" + value + "\"")
无效。只需$("#" + value)
即可。
$.each(data.fields, function (key, value) {
$("#" + value).append("<label class='error' for='" + value + "'>Please check your input</label>")
});
希望这有帮助!
答案 1 :(得分:1)
您正在向选择器添加反斜杠(\
),这会使您的选择器失败。删除反斜杠(即$("#" + this)
),它应该有效。
另一方面,jQuery Validation plugin使用name
属性进行验证,而不是使用id
属性,因此,除非您的服务器端验证返回id
属性,否则#39;我想要使用以name
属性为目标的选择器。
var selector = 'input[name="' + this + '"], textarea[name="' + this + '"]',
field = $(selector);
field.after($('<label />').attr('for', field.attr('id')).addClass('error').text('Please check your input'));
或者使用它来定位id
属性:
var selector = '#' + this,
field = $(selector);
$(selector).after($('<label />').attr('for', field.attr('id')).addClass('error').text('Please check your input'));
以下是展示行动的小提琴:http://jsfiddle.net/aHLgw/
最后,尽管使用this
关键字在技术上没有任何问题,但最好使用key
和value
参数,因为它会更清楚指示可能必须维护您编写的代码的其他人,您正在迭代对象或数组,而不是DOM元素集合。
答案 2 :(得分:-1)
使用this.text()
,它将返回元素的实际值或使用上面的hungerpain所述的回调函数。