Ошибка типа: document.template не определено

0

когда пользователь вводит значение в textarea, я хочу сгладить символ и показать его в текстовом поле, но я получаю сообщение об ошибке: TypeError: document.template is undefined

мой код:

<script>

    function updateCharsLeft() 
{
var counter, smsAmount; //, charLeft;

 nValue = document.template.value.charCodeAt(o);


 counter = document.template.value.length;

 if(nValue<128){

 if(counter == 0) { 
  smsAmount = 0;
 }
 else if(counter > 160) { 
  smsAmount = 1 + Math.ceil((counter -160)/152);
 }
 else { 
  smsAmount = 1; 
 }
 }else

 {
  if(counter == 0) { 
  smsAmount = 0;
 }
 else if(counter > 70) { 
  smsAmount = 1 + Math.ceil((counter -70)/63);
 }
 else { 
  smsAmount = 1; 
 }

 }

 document.intCharLeft.value = counter;
 document.SMSchain.value = smsAmount;

 if(counter < 121){
  //document.smsmobile.intCharLeft.style.color='#000000';
  //document.smsmobile.intCharLeft.style.backgroundColor='#00FF00';
 }
 else if (counter >= 121 && counter <= 160) {
  //document.smsmobile.intCharLeft.style.color='#000000';
  //document.smsmobile.intCharLeft.style.backgroundColor='#00FF00';
 }

 if(counter > 160){
  //document.smsmobile.intCharLeft.style.color='#000000';
  //document.smsmobile.intCharLeft.style.backgroundColor='#FFFF44';
 }
 //if(counter > 885)
 //{
  //{ document.smsForm.txtMsg.value = document.smsForm.txtMsg.value.substring(0, 885);}
}

    </script>

Html:

<div class="controls">
                                                <textarea onKeyUp="updateCharsLeft()" name="template" id="template" rows="5" class="input-block-level"> </textarea>

                                                <button type="submit" class="addtemplate">Save Template</button>

                                            </div>


<div class="control-group">
                                        <label for="textfield" class="control-label">No. of characters</label>
                                        <div class="controls">
                                            <input type="text" style="margin:0px;width:91px" name="intCharLeft" id="intCharLeft" placeholder="Text input" class="input-xlarge">
                                        </div>
                                    </div>

                                    <div class="control-group" style="margin:0px">
                                        <label for="textfield" class="control-label">No. of messages</label>
                                        <div class="controls">
                                            <input type="text" style="margin:0px;width:91px" name="SMSchain" id="SMSchain" placeholder="Text input" class="input-xlarge">
                                        </div>
                                    </div>

может ли кто-нибудь помочь мне решить эту проблему?

Теги:

2 ответа

0

Автоматические переменные, создаваемые браузерами на основе id элемента, являются свойствами window (и, следовательно, являются глобальными переменными), а не document, поэтому вы должны использовать только template (или window.template если хотите немного избыточно, но, возможно, немного яснее) не document.template.

Но полагаться на эти переменные не является лучшей практикой, потому что они могут быть затенены другими вещами, которые также сбрасываются в window. Вместо этого используйте document.getElementById("template"), который смотрит только на значения id (на неровных браузерах, IE6/7 сломан).

  • 0
    Спасибо за ваш ответ, я попробовал вот так 'nValue = document.getElementById (' template '). Value.charCodeAt (o);' он показывает ошибку ReferenceError: o не определено
  • 0
    @Xavi: Ну, что o ? Вы использовали его, как переменную, но он не определен нигде в вашем коде. Возможно, вы имели в виду 0 , цифра? (Это даст вам код символа первого символа в значении.) В любом случае это отдельная проблема от проблемы document.template .
0

Вы должны использовать getElementById вместо document.ElementName:

var template = document.getElementById('template');

Ещё вопросы

Сообщество Overcoder
Наверх
Меню