2016-07-12 2 views
0

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

Markup в JQuery для текстового поля

+'<div class="ckit-container__ft" data-ckit-footer>' 
      +'<form action="" class="ckit-composer-form">' 
       +'<div class="ckit-composer">' 
        +'<textarea data-ckit-composer-textarea placeholder="Add your reply" autocomplete="off" name="message" class="form-control ckit-composer__textarea"></textarea>' 
       +'</div>' 
      +'</form>'  
     +'</div> 

Binding нажатие клавиши событие

jQuery(function($){ 
jQuery('body').bind('keypress','[data-ckit-composer-textarea]',function(event) 
{ 
console.log(jQuery('[data-ckit-composer-textarea]').val());//returns empty 
console.log(jQuery(this).val());//returns empty string 
}); 
}); 

Поскольку HTML разметке существует вне $(function(){..}), я даже пытался клонировать шаблон и найти соответствующий атрибут замените, но не повезло.

var fullChatView = '<div class="ckit-container__ft" data-ckit-footer>' 
       +'<form action="" class="ckit-composer-form">' 
        +'<div class="ckit-composer">' 
         +'<textarea data-ckit-composer-textarea placeholder="Add your reply" autocomplete="off" name="message" class="form-control ckit-composer__textarea"></textarea>' 
        +'</div>' 
       +'</form>'  
      +'</div>'; 

var test = $(fullchatView).clone();//ReferenceError: fullchatView is not defined 
var val = test.find('[data-ckit-composer-textarea]').val(); 
console.log(val); 
+0

Какая версия jQuery вы используете? вы можете использовать '.on()' для версии 1.7 выше – guradio

+0

@guradio, где использовать? для нажатия клавиши? Но сначала я должен связать его? – 112233

+1

yes use 'jQuery ('body'). On ('keypress', '[data-ckit-composer-textarea]', function (event) {' ​​bind для версии менее 1,7 проверить [документация здесь] (http : //api.jquery.com/bind/) 'Как и jQuery 1.7, метод .on() является предпочтительным методом привязки обработчиков событий к документу. Для более ранних версий метод .bind() используется для присоединения обработчик события непосредственно к элементам. ' – guradio

ответ

1
jQuery('body').on('keypress','[data-ckit-composer-textarea]',function(event) { }); 

Documentation

По JQuery 1.7, метод .on() является предпочтительным способом для прикрепления обработчиков событий к документу. Для более ранних версий метод .bind() используется для привязки обработчика события непосредственно к элементам.

0

Попробуйте использовать jQuery.parseHTML()

где вы делаете клон

+0

Я предпочитаю не использовать клонирование .. указать, где ошибка? – 112233

1

В первом примере кода, изменение .bind() в .on() и использовать keyup event, а не keypress event.

Попробуйте следующее:

jQuery(function($) { 
    // Note: The $ parameter passed in to this callback function 
    // represents the jQuery object, so you can safely use $ inside 
    // this function. 
    $('body').on('keyup', '[data-ckit-composer-textarea]', function() { 
     console.log($(this).val()); 
    }); 
}); 

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

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