2016-06-29 7 views
0

Mein Javascript ist ziemlich grundlegend, also würde ich zwar die Experten fragen, ob meine gegenwärtige Methode richtig ist oder nicht, und wenn es bessere, akzeptierte Wege gibt.Korrekter Weg, 'This' zu übergeben, um in Javascript zu funktionieren

Normalerweise würde ich jQuerys .on Ereignis verwenden, um eine Funktion auszulösen, wie folgt aus:

$("body").on("input", "textarea", textareaAutoGrow); 

function textareaAutoGrow() { 
    var pad = $(this).outerHeight(false) - $(this).innerHeight(); 

    this.style.height = "auto"; 
    this.style.height = (this.scrollHeight + pad) + "px"; 
} 

diese Weise ‚dies‘ automatisch übergeben wird, aber jetzt brauche ich die gleiche Sache auf die Größe des Fensters zu tun Ereignis für alle Textareas, nicht nur ein bestimmtes.

Hier ist, wie ich habe es getan:

$(window).on("resize", refreshAutoGrow); 

function refreshAutoGrow() { 
     $el = $(".text-field.autogrow").filter(function() { 
      return $(this).val(); 
     }); 

     $el.each(function() { 
      textareaAutoGrow.call(this); 
     }); 
    } 

ich die textareaAutoGrow Funktion .call genannt habe - etwas, das ich nahm aus der Betrachtung jquery Widgets auf.

Es funktioniert, aber wie gesagt, es ist sehr viel raten - ist dies der richtige Ansatz, oder gibt es mehr akzeptierte Möglichkeiten zu tun, was ich will?

Antwort

1

-Trigger mit each auf die Größe der Textfelder in einer Schleife:

function textareaAutoGrow() { 
    var pad = $(this).outerHeight(false) - $(this).innerHeight(); 

    this.style.height = "auto"; 
    this.style.height = (this.scrollHeight + pad) + "px"; 
} 

$("body").on("input", "textarea", textareaAutoGrow); 
$(window).on("resize", funtion() { 
    $("textarea").each(textareaAutoGrow); 
}); 
+1

zuerst auf („Input“ wird nicht auf dynamische Textfelder arbeiten müssen Sie die Frage '$ den Code Formular verwenden („body“). on ("input", "textarea" ' – jcubic

+0

jetzt funktioniert der zweite Code nicht, weil' textareas' einen Verweis auf den Körper enthält. – jcubic

+0

Ahh, sicher.;) Stumm mich. Ich entfernte diesen Teil dann. Es wäre Overhead zu tun es in dieser Antwort. – eisbehr

Verwandte Themen