试图使jquery验证错误动态添加,为什么这段代码不起作用?

时间:2016-08-29 01:21:47

标签: jquery jquery-validate

我使用以下代码尝试动态添加错误标签,而不必使用那么多if else语句,但它似乎不起作用,任何帮助赞赏:)

这有效:

errorPlacement: function(error, element) {

        if (element.attr("name") == "site" )
            error.insertAfter("div#siteerror");
        else if  (element.attr("name") == "name" )
            error.insertAfter("div#nameerror");
        else if  (element.attr("name") == "email" )
            error.insertAfter("div#emailerror");
        else if  (element.attr("name") == "password" )
            error.insertAfter("div#passworderror");
        else if  (element.attr("name") == "headerimage" )
            error.insertAfter("div#headerimageerror");
        else if  (element.attr("name") == "header1" )
            error.insertAfter("div#header1error");
        else if  (element.attr("name") == "header2" )
            error.insertAfter("div#header2error");
        else if  (element.attr("name") == "headerfont" )
            error.insertAfter("div#headerfonterror");
        else if  (element.attr("name") == "menucolor" )
            error.insertAfter("div#menucolorerror");
        else if  (element.attr("name") == "menufontcolor" )
            error.insertAfter("div#menufontcolorerror");
        else if  (element.attr("name") == "menufont" )
            error.insertAfter("div#menufonterror");
        else if  (element.attr("name") == "backgroundcolor" )
            error.insertAfter("div#backgroundcolorerror");
        else if  (element.attr("name") == "sitefontcolor" )
            error.insertAfter("div#sitefontcolorerror");
        else if  (element.attr("name") == "sitefont" )
            error.insertAfter("div#sitefonterror");
        else if  (element.attr("name") == "galleryimages" )
            error.insertAfter("div#galleryimageserror");
        else
            error.insertAfter(element);
    },

但这并不是:

errorPlacement: function(error, element) {
var $inputs = $('input');
$inputs.each(function(){
    var name = $(this).attr('name');
    var errorname = ('"div#' + name + 'error"')
if (name === name) {
    console.log("name: " + name + " " + "errorname: " + errorname);
    error.insertAfter($($.parseHTML(errorname)));
    console.log("name matches!");
} else {
    error.insertAfter(element);
}
});
},

它返回所有正确的值,但出于某种原因,只是赢了工作,任何想法?

1 个答案:

答案 0 :(得分:1)

开发人员已经为您提供了element参数,该参数表示要验证的元素。

var name = $(element).attr('name');

由于errorPlacement在验证时会处理每个元素,因此您不需要.each()循环,element参数也适用于每个元素。

你搞砸了你的引号,错过了分号,你不需要括号......

var errorname = ('"div#' + name + 'error"')

这反过来......

var errorname = 'div#' + name + 'error';

如果您尝试将错误消息插入特定的div ...

$(errorname).html(error);

if (name === name)也毫无意义,因为永远不会出现与自身不相等的情况。

DEMO:jsfiddle.net/rttLsoxL/

决赛:

errorPlacement: function(error, element) {
    var name = $(element).attr('name');
    var errorname = 'div#' + name + 'error';
    console.log("name: " + name + " " + "errorname: " + errorname);
    $(errorname).html(error);
},