Próbuję zaimplementować ogólną funkcję formularza z kilkoma polami w następującym formacie.Javascript: ustaw tekst etykiety
<label id="LblTextCount"></label>
<textarea name="text" onKeyPress="checkLength(this, 512, LblTextCount)">
</textarea>
I następujące JavaScript:
function checkLength(object, maxlength, label) {
charsleft = (maxlength - object.value.length);
// never allow to exceed the specified limit
if(charsleft < 0) {
object.value = object.value.substring(0, maxlength-1);
}
// I'm trying to set the value of charsleft into the label
label.innerText = charsleft;
document.getElementById('LblTextCount').InnerHTML = charsleft;
}
Pierwsza część działa dobrze, ale jestem nie mógł ustawić wartość charsleft
na etykiecie. Co ja robię źle? Należy zauważyć, że szukam dynamicznego podejścia zamiast twardego kodowania nazwy etykiety w funkcji JS. JQuery byłoby też dobrze :)
Rozwiązanie - dzięki wszystkim!
HTML
<label id="LblTextCount"></label>
<textarea name="text">
</textarea>
JS
$(document).ready(function() {
$('textarea[name=text]').keypress(function(e) {
checkLength($(this),512,$('#LblTextCount'));
}).focus(function() {
checkLength($(this),512,$('#LblTextCount'));
});
});
function checkLength(obj, maxlength, label) {
var charsleft = (maxlength - obj.val().length);
// never allow to exceed the specified limit
if(charsleft < 0) {
obj.val(obj.val().substring(0, maxlength-1));
}
// set the value of charsleft into the label
$(label).html(charsleft);
}
Czy istnieje elegancki sposób również wiązać checkLength(), aby onfocus odpowiedniego onPaste bez powielania treści $ (document) .ready (funkcja())? – MrG
@MrG - Jest, zobacz moją edycję. Nie oznacza to również, że zdarzenie paste nie jest w różnych przeglądarkach. – karim79
Tkx karim79, działa idealnie dobrze w osobnym oknie (wszystkie przeglądarki wymienione poniżej), ale kończy się niepowodzeniem w zakładce JQuery UI bez żadnych błędów w konsoli (FF/Safari/Opera zawodzi, IE działa dobrze). Masz pomysł? Wielkie dzięki! – MrG