2012-01-18 7 views
1

je ceci:setTimeOut avec fonction JQuery .live()

function toggle() { 
    $('#clbttn').fadeOut('fast'); 
    $('#msg').fadeOut('fast'); 
    setTimeout(function() { $('#msg').remove(); $('#clbttn').remove(); }, 200); 
} 
$('#clbttn').live('click', toggle()); 

Et par conséquent je ceci: Uncaught TypeError: Object #clbttn n'a pas de méthode apply

Quelqu'un sait-il Ce que je devrais faire?

+0

Vous passez la valeur de retour ** ** (ce qui est * pas * une fonction) de 'toggle' à' live'. –

Répondre

4

vous devez remplacer toggle() par toggle, car le premier est un appel de fonction.

$('#clbttn').live('click', toggle); 
+1

Ouais, ça marche. Je vous remercie! Mais j'ai encore une question ... Pourquoi ça fonctionnait bien depuis un mois? C'est vraiment étrange. –

0

en direct est obsolète, jquery recommande d'utiliser on

As of jQuery 1.7, the .live() method is deprecated. Use .on() to attach event handlers. Users of older versions of jQuery should use .delegate() in preference to .live().

This method provides a means to attach delegated event handlers to the document element of a page, which simplifies the use of event handlers when content is dynamically added to a page. See the discussion of direct versus delegated events in the .on() method for more information.

1

Comme Jason dit live est dépréciée, et doit être remplacé par on. Mais, ne pas faire ceci:

$('#clbttn').on('click', toggle); 

Cela ne fonctionnera pas avec le contenu dynamiquement ajouté, car il ne sera pas mis en place un gestionnaire d'événements délégué. au-dessus du équivaudrait à

$('#clbttn').bind('click', toggle); 

Pour utiliser on avec un contenu dynamique ajouté, vous voulez:

$(document).on('click', '#clbttn', toggle); 

Ceci va dire jQuery pour écouter tous les clics bouillonnent à la racine du document, et le feu de la bascule lorsque le clic provient d'un élément avec l'identifiant clbttn. Si vous connaissez cet élément ne sera jamais, disons, un div id avec foo, vous pouvez plus efficacement écrire ce que

$("#foo").on('click', '#clbttn', toggle); 
+0

Merci beaucoup! –