2009-12-22 8 views

Répondre

4

Si vous avez le contrôle sur la création de textarea, puis il suffit d'appeler .elastic() sur la zone de texte une fois qu'il est créé:

// In whatever AJAX callback creates the textarea... 
var newTextarea = $('<textarea></textarea>'); 

// Append the element to the DOM wherever it belongs... 
parentElement.append(newTextarea); 

// Add elastic behavior. 
newTextarea.elastic(); 
+0

Vraisemblablement, puisque vous appelez un plugin, vous n'avez pas de contrôle over textarea creation - $ .live est une meilleure solution ... – Summer

+0

L'auteur n'a jamais dit que le textarea avait été créé via un plugin, ils ont seulement dit qu'ils utilisaient un plugin pour étendre son comportement. Il me semble inutile d'ajouter un gestionnaire d'événements live() lorsque vous savez quand la zone de texte est créée et qu'elle en a le contrôle. – Annabelle

4

Avec jQuery 1.4, vous pouvez le faire:

$("textarea").live("focus", function() { 
    $(this).elastic().die("focus"); 
}); 

jQuery 1.3.x ne prend pas en charge l'événement de mise au point pour le live(), il obtient un peu plus délicat:

$("textarea").live("keydown", elasticize).live("mousedown", elasticize); 

function elasticize() { 
    $(this).elastic().die("keydown").die("mousedown"); 
} 

Les appels die sont là, de sorte que l'élasticité n'est appelée qu'une fois pour chaque zone de texte.

+0

mais pourquoi serait-on utiliser quand 1.3 1.4 est là-bas? =) – ajsie

+0

hm i remarqué que Ive a obtenu 1,3 et 1,4 téléchargeable isnt sur leur site..where u peut l'obtenir? – ajsie

+0

1.4 est toujours en alpha - http://blog.jquery.com/2009/12/18/jquery-14-alpha-2-released/ – jimyi

0

Les autres réponses suggèrent de détruire le gestionnaire de mise au point, mais qui peuvent briser d'autres dépendances. Au lieu de cela, vous pouvez marquer votre zone de texte avec class = "elastic". Une fois l'élastique initialisé, vous pouvez supprimer la classe "élastique" pour éviter les répétitions.

$(document) .on('focus','textarea.elastic',function(e) { $(this).removeClass('elastic').elastic(); })