2016-07-12 10 views
0

Es funktionierte gut all dies während, gerade jetzt neu-Faktor Codes für andere Funktionen, jetzt dieses dumme Problem auftritt und ich habe keine Ahnung, warum dies passiert.Dynamisch hinzugefügt Textbereich Wert auf Tastendruck

Markup in jquery für TextArea-

+'<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 keypress Ereignis

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 
}); 
}); 

Da die HTML-Markup außerhalb $(function(){..}) existieren, ich habe sogar versucht, die Vorlage klonen und finden Sie das entsprechende Attribut Ersatz aber kein Glück.

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

Welche Version von jQuery verwenden Sie? Sie können '.on()' für Version 1.7 oben verwenden – guradio

+0

@guradio, wo zu verwenden? für Tastendruck? Aber ich sollte es zuerst richtig binden? – 112233

+1

Ja, verwenden Sie 'jQuery ('body'). On ('Tastendruck', '[Daten-ckit-Composer-TextArea]', Funktion (Ereignis) {Bind ist für die Version weniger als 1,7 prüfen [Dokumentation hier] (http : //api.jquery.com/bind/) 'Ab jQuery 1.7 stellt die Methode .on() die bevorzugte Methode zum Anhängen von Ereignishandlern an ein Dokument dar. Für frühere Versionen wird die Methode .bind() zum Anhängen verwendet ein Event-Handler direkt zu elements.' – guradio

Antwort

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

Documentation

Ab jQuery 1,7, die .auf() Methode ist die bevorzugte Methode für die zu einem Dokument, Event-Handler zu befestigen. Bei früheren Versionen wird die Methode .bind() zum direkten Anhängen eines Ereignishandlers an Elemente verwendet.

1

In Ihrem ersten Codebeispiel Klon tun, .bind() zu .on() und die keyup event, anstatt die keypress event verwenden ändern.

Versuchen Sie Folgendes:

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()); 
    }); 
}); 

Wenn die keypress event abgefeuert wird, hat sich der Wert der Textbereich noch nicht geändert worden, um die gedrückte Taste zu schließen.

Verwandte Themen