2010-07-17 8 views
1

J'utilise la fonction suivante semble afficher un message d'état après un envoi du formulaire de ma page asp.net .. La fonction est appelée, mais il (alertmsg div) ne pas montrer pourquoi ?ajoutant Dynamiquement un élément div dans jquery

function topBar(message) { 
     var $alertdiv = $('<div id = "alertmsg"/>'); 
     $alertdiv.text(message); 
     alert($alertdiv); 
     alert($alertdiv.text(message)); 
     $alertdiv.click(function() { 
      $(this).slideUp(200); 
     }); 
     $(document.body).append($alertdiv); 
     setTimeout(function() { $alertdiv.slideUp(200) }, 5000); 
    } 

Qu'advient est à la fois les déclarations d'alerte montrent [Object object] ... Je pense que les deux ont besoin de montrer différentes sorties ... Toute suggestion ..

css:

#alertmsg 
{ 
    font-family:Arial,Helvetica,sans-serif; 
    font-size:135%; 
    font-weight:bold; 
    overflow: hidden; 
    width: 100%; 
    text-align: center; 
    position: absolute; 
    top: 0; 
    left: 0; 
    background-color: #404a58; 
    height: 0; 
    color: #FFFFFF; 
    font: 20px/40px arial, sans-serif; 
    opacity: .9; 
} 
+0

en utilisant 'alert' est une merde façon de déboguer Javascript. Découvrez [Firebug] (http://getfirebug.com/), et vous verrez mieux ce qui se passe. –

Répondre

2

Vous êtes alertant l'objet jQuery. Essayez de modifier votre alerte pour: alert($alertdiv.get(0).innerText);

À part cela, il est possible que votre div ne s'affiche pas car vous ajoutez l'événement click avant d'ajouter l'élément div à la page.

Essayez de changer:

$alertdiv.click(function() { 
      $(this).slideUp(200); 
     }); 

Pour:

$alertdiv.bind('click', function() { 
      $(this).slideUp(200); 
     }); 

ou même:

$alertdiv.live('click', function() { 
      $(this).slideUp(200); 
     }); 

Je pense que cela peut être la seule façon de lier des éléments générés dynamiquement. Je n'ai jamais essayé .click() en dehors de la fonction de document prêt.

Edit: Outre la suggestion ci-dessus pour jQuery, votre css devrait être modifiée pour indiquer une hauteur de la div. Votre hauteur de 0 l'amènera à rendre, techniquement, et éventuellement glisser vers le haut. Mais, vous ne serez pas en mesure de le voir, car il est 0 pixels de hauteur au point 0,0.

1

alerte ($ alertdiv.text (message)); est également en train de mettre le texte de $ alertdiv à messasge et de renvoyer $ alertdiv afin de supporter le chaînage de jQuery. Ce que vous cherchez est $ alertdiv.text(), qui retournerait le texte dans $ alertdiv.

Aussi, pourquoi créez vous que div dynamique? Y at-il une raison pour laquelle vous ne pouvez pas l'avoir sur la page et la masquer/montrer via slideUp()/slideDown()?

+0

juste un div créé uniquement sur la forme ... Donc soumettre i fs dynamiquement créé ... –

+0

+1 pour le '.text()'. J'essaye habituellement d'éviter '.text()' et '.html()' pour récupérer de l'élément html (et donc oublier qu'ils existent), parce qu'ils peuvent facilement être changés en fonction d'affectation qui retourne un objet jQuery. En outre, l'une des raisons d'ajouter dynamiquement la div est d'éviter de fausses confirmations sur les appareils et comme les lecteurs d'écran ou les navigateurs en mode texte. –

+0

@Jim: bon point sur les lecteurs d'écran, etc. – Faisal

0

Pour insérer un <div> dynamiquement vous pouvez utiliser cette

$('<div>Test</div>').insertAfter('.inner'); // insérer après un élément avec une manière générale, la classe intérieure

ou mieux

$("#myparent").html("<div id='mynewdiv'>hi</div>"); 
Questions connexes