2012-03-25 16 views
0

基本的に私はフォームを検証しています。私はエラーメッセージを収集していますし、ダイナミックに生成されたdivにそれらを追加しています。今、私はこれが.here DIVにこれらのメッセージを追加することができませんが、私は/動的に生成されたdivに動的コンテンツを追加するにはどうすればよいですか?

//generates a div onclick of submit button 
$("body").append("<div class='overlay'><div class='errorContainer'>.html(errorMsg)</div><div>`<a href='javascript:void(0);' class='cross'>X</a><div></div>"); 

.html(errorMsg)これは、エラーが発生して行わ

function closeErrorBox() { 
      var errorMsg = ""; 
       var ferrorMsg = "Please say your first name" + "<br>"; 
       var aerrorMsg = "Please type address" + "<br>"; 
       var eerrorMsg = "Please type a valid email Address" + "<br>" 
       if($("#name").val() == "") { 
        errorMsg += ferrorMsg; 
       } 
       if($("#address").val() == "") { 
        errorMsg += aerrorMsg; 
       } 
       if($("#email").val() == "") { 
        errorMsg += eerrorMsg; 
       } 

       $(".errorContainer").html(errorMsg); 


       $(".overlay").remove(); 
       } 

答えて

1

.errorContainer divは.overlay div内にあります。関数の最後でオーバーレイを削除すると、errorContainerも削除されます。それ以外の場合は、.html(errorMsg) が正常に動作しているようです(まだエラーが発生している場合は、何が問題になるのかを明記してください)。

あなたの質問を読んで、私はあなたのプログラムの流れを理解できませんでした:エラーが既に分かっているときにそのdivを追加していて、 "X"をクリックすると閉じますか?その場合、次のようにすることをお勧めします。

var errorMsg = ""; 
var ferrorMsg = "Please say your first name" + "<br>"; 
var aerrorMsg = "Please type address" + "<br>"; 
var eerrorMsg = "Please type a valid email Address" + "<br>" 
if($("#name").val() == "") { 
    errorMsg += ferrorMsg; 
} 
if($("#address").val() == "") { 
    errorMsg += aerrorMsg; 
} 
if($("#email").val() == "") { 
    errorMsg += eerrorMsg; 
} 

// Adapting Diego's answer: 
$("<div class='overlay'><div class='errorContainer'></div><div><a href='javascript:void(0);' class='cross'>X</a><div></div>") 
    .appendTo($("body")) 
    .find(".errorContainer") 
     .html(errorMsg) 
     .end() 
    .find(".cross") 
     .click(function(e) { 
      e.preventDefault(); 
      $(this).closest(".overlay").remove(); 
     }); 
+0

これは非常に有望ですが、私はちょうど質問がありました。その問題を解決するコードを作成しますか?ありがとう – Mike

+0

いいえ、それはしません。 1つのオーバーレイだけが必要な場合は、動的に作成するのではなく、静的に作成することをお勧めします(HTMLに入れてください)。非表示にして( 'style =" display:none "')、必要なときに '$("。overlay ")。show()')に表示し、 '.cross'のクリックで非表示にします( '$("。overlay ")。hide()')。こうすることで、不必要に追加/削除することを避けることができます。 – mgibsonbr

+0

それは動作しません、firebugはerrorMsgが行に定義されていないと言っています.html(errorMsg) – Mike

0

間違っていたものである私は、あなたが意味を考える:

//generates a div onclick of submit button 
$("body").append("<div class='overlay'><div class='errorContainer'></div><div><a href='javascript:void(0);' class='cross'>X</a><div></div>").find(".errorContainer").html(errorMsg); 
+0

複数の '.overlay'がある場合、ページ内のすべての.errorContainerに同じエラーメッセージが表示されます。 body上に 'append'の代わりに新しく作成されたdivに' appendTo'を使うことをお勧めします( 'find'はそのdivに制限されます)。 – mgibsonbr

+0

ありがとうございますが、送信ボタンをクリックするたびにオーバーレイが追加されます。どのように私はそれを避けるのですか?私はオーバレイを1回追加することを意味します。 – Mike

関連する問題