0

我从我的验证 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 验证插件,但我也需要使用服务器端验证。我已禁用验证器。

4

3 回答 3

1

两件事情 :

  • 您需要将两个参数传递给each. this将返回一串数组。所以,考虑我正在记录thisparameters传递给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”字符串在范围内时)

    控制台输出 文档中的更多信息: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>")
    });
    

希望这可以帮助!

于 2013-07-05T18:59:56.910 回答
1

您正在向选择器添加反斜杠 ( \),这将使您的选择器失败。删除反斜杠(即,$("#" + this)),它应该可以工作。

另一方面,jQuery Validation 插件使用name属性进行验证,而不是id属性,因此除非您的服务器端验证返回属性,否则您id将要使用以该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关键字在技术上没有任何问题,但最好使用keyandvalue参数,因为它可以更清楚地向可能需要维护您编写的代码的其他人表明您正在迭代对象或数组,而不是 DOM 元素集合。

于 2013-07-05T21:22:53.573 回答
-1

使用this.text(),这将返回元素的实际值或使用上面饥饿痛所告诉的回调函数。

于 2013-07-05T19:11:54.537 回答