Javascript: текст метки набора

Я пытаюсь реализовать общую функцию для формы с несколькими полями в следующем формате.

<label id="LblTextCount"></label>
<textarea name="text" onKeyPress="checkLength(this, 512, LblTextCount)">
</textarea>

И следующий 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;
}

Первая часть работает нормально, но я не в состоянии установить charsleftvalue into the label значение на этикетке . Что я делаю не так?noneПожалуйста, обратите внимание, что я ищу динамический подход вместо жесткого кодирования имени метки в функцию JS. J Квери было бы хорошо слишком :)


Решение - спасибо всем!

Ответ на: "Javascript: текст метки набора"

Количество ответов:3

InnerHTML должен быть innerHTML:

document.getElementById('LblAboutMeCount').innerHTML = charsleft;

Вы должны связать вашу checkLength function to your textarea with jQuery rather than calling it inline and rather intrusively: функции для вашего textarea с j'query, а не называть его в линию и довольно навязчиво:

$(document).ready(function() {
    $('textarea[name=text]').keypress(function(e) {
        checkLength($(this),512,$('#LblTextCount'));
    }).focus(function() {
        checkLength($(this),512,$('#LblTextCount'));
    });
});

Вы можете neaten до checkLength, используя более j'query, и я бы не стал использовать "объект" в качестве формального параметра:

function checkLength(obj, maxlength, label) {
    charsleft = (maxlength - obj.val().length);
    // never allow to exceed the specified limit
    if( charsleft < 0 ) {
        obj.val(obj.val().substring(0, maxlength-1));
    }
    // I'm trying to set the value of charsleft into the label
    label.text(charsleft);
    $('#LblAboutMeCount').html(charsleft);
}

Так что если применить выше, вы можете изменить разметку на:

<textarea name="text"></textarea>

Для динамического подхода, если ваши этикетки всегда перед текстовыми областями:

$(object).prev("label").text(charsleft);

Вы делаете несколько вещей неправильно. Объяснение следует исправленный код:

<label id="LblTextCount"></label>
<textarea name="text" onKeyPress="checkLength(this, 512, 'LblTextCount')">
</textarea>

Обратите внимание на цитаты вокруг идентификатора.

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

    // set the value of charsleft into the label
    document.getElementById(label).innerHTML = charsleft;
}

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

Позвольте мне знать, как это работает для вас

EDIT Не то, что, не объявляя charsleft как вар, вы неявно создания глобальной переменной. лучший способ было бы сделать следующее, когда объявление его в функции:

var charsleft = ....