2009-10-15 7 views
1

J'ajoute des messages de mise à jour en tant que lignes de table lorsqu'un utilisateur modifie un bouton radio. Je courais sur le fait qu'une fois le message ajouté, il n'avait pas la fonctionnalité que je pensais que ce serait, car il a été ajouté après le chargement de la page. Puis j'ai trouvé le plugin livequery qui semblait permettre aux éléments ajoutés après coup d'avoir la même fonctionnalité que les éléments chargés avec la page.jQuery - aide plugin livequery

J'ai le clic fadeout() fonctionne correctement, mais je n'arrive pas à comprendre la syntaxe pour setTimeout() sur la ligne de table qui vient d'être ajoutée. Je sais que la syntaxe actuelle n'est pas correcte, et je l'ai laissé au point où j'étais frustré.

<script> 
    $(document).ready(function(){ 
    $("input[@name='optInOut']").change(function(){ 
     $('#tblUpdates').append('<tr class="msgUpdate"><td colspan="2">added message0</td><td align="right"><img src="../Images/CCC/12-em-cross.png" class="imgClose" alt="close message" title="close message" /></td></tr>'); 
    }); 

    setTimeout($.livequery.function() { 
     $('.msgUpdate').fadeOut('normal'); 
     }, 1000); // <-- time in milliseconds 
    }); 

    $('img.imgClose').livequery('click', function(){ 
     $(this).parent().parent().fadeOut('normal'); 
    }); 
</script> 

Si j'ai besoin de fournir plus d'informations, je vais essayer de le faire et merci d'avance pour votre aide.

+0

je peux supprime la section setTimeout() tous ensemble. Je vais laisser l'utilisateur fermer le message par ses propres moyens. Merci à tous pour votre aide. – mmarceau

Répondre

2

avant tout ce bit ici

 $('img.imgClose').livequery('click', function(){ 
     $(this).parent().parent().fadeOut('normal'); 
}); 
</script> 

devrait être

 $('img.imgClose').livequery('click', function(){ 
     $(this).parent().parent().fadeOut('normal'); 
    });//<--- closes the livequery call 
});//<--- closes document.ready 
</script> 

d'autre part, je recommande contre livequery pour le fadeOut, mais si vous allez l'utiliser, cette syntaxe:

setTimeout($.livequery.function() { 
     $('.msgUpdate').fadeOut('normal'); 
     }, 1000); // <-- time in milliseconds 
    }); 

devrait être:

$.livequery(function(){ 
    setTimeout(function(){ 
    $('.msgUpdate').fadeOut('normal'); 
    },1000); 
}); 
+2

merci pour la correction de la syntaxe. très appréciée. – mmarceau

0

Vous n'avez pas besoin d'appeler window.setTimeout? Je ne suis pas sûr si cela est nécessaire, mais cela pourrait valoir la peine d'essayer.

0

Avec la dernière édition de jQuery (1.3.X), vous n'avez pas besoin d'utiliser le plugin livequery. Vous pouvez simplement utiliser $ ("div"). Live ("clic", etc ....

Je pense que si vous regardez la nouvelle fonction live de jQuery, vous pourriez être en mesure de nettoyer votre Javascript afin qu'il est plus compréhensible.

+0

Je ne suis pas sûr si la version 1.3.x actuelle de jQuery causerait des problèmes avec le code que nous utilisons actuellement. Nous sommes sur 1.2.6, puisque c'est ce qui existait lorsque le site a été développé à l'origine. – mmarceau

0

Si l'objectif avec le setTimeout est de disparaître des éléments qui existaient déjà lorsque la page a été chargée, alors vous ne devriez pas besoin d'impliquer livequery

setTimeout("$('.msgUpdate').fadeOut('normal');", 1000);