2016-08-29 1 views
0

私は任意のヘルプは感謝、else文場合は非常に多くを使用する必要がありますが、動作していないようしようとすると、動的エラーラベルを追加していないために、次のコードを使用しています:)jqueryの検証エラーを作成しようとすると動的に追加されますが、なぜこのコードは機能しませんか?

をこの作品:

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

それが正しい値のすべてを返しますが、何らかの理由だけで、任意のアイデアは動作しませんか?

+2

は何これが行うことになっていますか? 'if(name === name)' – billynoah

+0

要素が自分自身にマッチすることを確認します。私はそれが無意味だと思いますが、真を返し、各入力の後にエラー名を挿入し、一致する属性を取得する必要があります名前と同じdiv IDを一致させることによってエラー名に変換するので、name変数を使用してIDのattrも取得します。コンソールログは、必要なすべての正しい変数を返しますが、それだけではありません仕事... – JamesBong

答えて

1

開発者からは、検証対象の要素を表すelement引数が渡されています。各要素と

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

errorPlacementので、取引それが検証されていて、あなたが.each()ループを必要としない、とelement引数はすでに各1のために動作します。

あなたはセミコロンを逃し、そしてあなたが括弧を必要としない、ここにあなたの引用符を台無しに...

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); 
}, 
+0

洞察に満ちた説明と解決策をありがとう、本当にありがとう、これは私の欠陥のある論理を分析し、私の思考プロセスを改善して初期の状況に近づきました。私はあなたの助けに感謝し、日! – JamesBong

関連する問題