在服务器端验证之后创建像jquery validate这样的错误标签

时间:2013-07-05 18:53:35

标签: jquery

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

3 个答案:

答案 0 :(得分:1)

两件事:

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

    Console output 更多信息,请访问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关键字在技术上没有任何问题,但最好使用keyvalue参数,因为它会更清楚指示可能必须维护您编写的代码的其他人,您正在迭代对象或数组,而不是DOM元素集合。

答案 2 :(得分:-1)

使用this.text(),它将返回元素的实际值或使用上面的hungerpain所述的回调函数。