2009-12-22 2 views
2

Я использую jquery elastic plugin для расширения текстового поля. он отлично работает, но я хочу использовать это в текстовом поле, которое добавлено в DOM с помощью ajax, но, к сожалению, этот плагин не имеет встроенной функции.жить для jquery эластичный плагин?

есть ли способ решить эту проблему?

http://www.unwrongest.com/projects/elastic/

ответ

4

Если у вас есть контроль над созданием TEXTAREA, то просто позвоните .elastic() на текстовое поле после его создания:

// 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

Предположительно, поскольку вы вызываете плагин, у вас нет контроля над созданием textarea - $ .live - лучшее решение ... – Summer

+0

Плакат никогда не говорил, что текстовое поле было создано через плагин, они только сказали, что используют плагин для расширения своего поведения. Мне кажется бесполезным добавить обработчик события live(), когда вы знаете, когда создается текстовое поле и контролирует его. – Annabelle

4

С JQuery 1.4, вы можете сделать это:

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

JQuery 1.3.x не поддерживает событие фокусировки для живой(), поэтому он получает немного сложнее:

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

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

Звонки die так эластичны, что только один раз вызывается для каждого текстового поля.

+0

но почему бы кто-нибудь использовать 1.3, когда 1.4 там? =) – ajsie

+0

гм я заметил, что ив получил 1.3 и 1.4 Isnt загружаемое на их site..where может у его получить? – ajsie

+0

1.4 все еще находится в альфа - http://blog.jquery.com/2009/12/18/jquery-14-alpha-2-released/ – jimyi

0

Другие ответы предполагают, разрушив обработчик фокуса, но это может нарушить работу других зависимостей.

Вместо этого вы можете пометить свое текстовое поле классом = "эластичный". После инициализации эластичного материала вы можете удалить «эластичный» класс, чтобы избежать повторений.

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

Смежные вопросы