Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.01.2015, 19:09
Аватар для EmperioAf
Профессор
Отправить личное сообщение для EmperioAf Посмотреть профиль Найти все сообщения от EmperioAf
 
Регистрация: 15.01.2015
Сообщений: 622

getElementById выдаёт null
<script type="text/javascript">

            var countAddedDates = 0;
            var currentCountDates = 5;
        //    var lastBodyChild = document.getElementById("button1");
     //       document.body.appendChild(lastBodyChild);
            alert("Hello world");
            var ar1 = document.getElementsByTagName("div");
            var ar2 = document.getElementsByTagName("input");
            var ar3 = document.getElementsByTagName("button");

            alert(ar1.length);
            alert(ar2.length);
            alert(ar3.length);
            for (var i = 0;i< ar.length;i++)
             alert(ar[i]);


    function showSelect2(){
    document.getElementById("div2").hidden=false;
    if (document.getElementById("sl1").value=="ss1")
    document.getElementById("sl2").hidden = false;
    else document.getElementById("sl2").hidden = true;
    }
    function appendDates() {

        var arr = [];
    for(var i = 0;i < 16;i++){
      arr[i] = createDateElement();
    }
        var currentId1 = countAddedDates;
        var currentId2 = countAddedDates+1;

       document.body.appendChild(arr[currentId1]);
       document.body.appendChild(arr[currentId2]);
    //   document.body.insertBefore(arr[currentId2], document.body.lastChild);
     countAddedDates +=2;


    }
    function createDateElement() {

        var container = document.createElement('input');
        container.id = "date" + currentCountDates;
        container.type = 'date';
        currentCountDates++;

        return container;
    }
  
    </script>

<body bgcolor="#deb887">
<div id="div1" name="div1">
    <div>

<label><strong>Выберите вид обжалуемого документа</strong></label>
<br><br>
   <select id="sl1" name="selectnum1"  onchange="showSelect2()" autofocus="autofocus">

	<option selected disabled>------Г Р А Ж Д А Н С К О Е  &nbsp;  С У Д О П Р О И З В О Д С Т В О------ </option>
    
// и ещё куча <option>...

   </select>
   <br><br>


   <select id="sl2" name="selectnum2" hidden>

   </select>

    </div>
   <br><br>
    <div id="div2" name="div2" hidden="true">

   <label><strong>Дата 1</strong></label><br><br>
   <input id="date1" type="date"><br><br>
   <label><strong>Дата 2</strong></label>
   <br><br>
   <input id="date2" type="date">
   <br><br>
   *Срок ... с &nbsp;<label><strong>Дата 3&nbsp;</strong></label> <input id="date3" type="date"><label><strong>&nbsp;до Дата 4&nbsp;</strong></label>&nbsp;
       <input id="date4" type="date">&nbsp;&nbsp;&nbsp;<button id="button1" onclick="appendDates()">+</button>
       <br><br>
       <label><strong>*Дата возобновления течения срока исковой давности после перерыва&nbsp;</strong></label>
       <input id="date21" type="date">
       <button id="button2" onclick="calculate()" style="color: beige">Рассчитать</button>

    </div>
</div>

</body>


собственно когда срабатывает onchange у <select id="sl1" функция showSelect2 отрабатывает правильно и функция document.getElementById отрабатывает в ней верно.
А когда я в начале скрипта пишу:
var ar1 = document.getElementsByTagName("div");
var ar2 = document.getElementsByTagName("input");
var ar3 = document.getElementsByTagName("button");

alert(ar1.length);
alert(ar2.length);
alert(ar3.length);
функции document.getElementsByTagName, document.getElementById, document.getElementByName почему то не видят элементов моей страницы. Изучаю JS всего 6 дней, поэтому однозначно я тут чего то простого не понимаю.
Помогите пожалуйста!
Ответить с цитированием
  #2 (permalink)  
Старый 15.01.2015, 19:23
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

EmperioAf,
у вас нет переменной ar и ещё нет на странице никаких элементов чтоб искать их -- сам скрипт в конец страницы

Последний раз редактировалось рони, 15.01.2015 в 19:25.
Ответить с цитированием
  #3 (permalink)  
Старый 15.01.2015, 19:28
Аватар для EmperioAf
Профессор
Отправить личное сообщение для EmperioAf Посмотреть профиль Найти все сообщения от EmperioAf
 
Регистрация: 15.01.2015
Сообщений: 622

Сообщение от рони Посмотреть сообщение
EmperioAf,
у вас нет переменной ar
это я просто забыл переименовать. Эти 6 строчек
var ar1 = document.getElementsByTagName("div");
var ar2 = document.getElementsByTagName("input");
var ar3 = document.getElementsByTagName("button");
alert(ar1.length);
alert(ar2.length);
alert(ar3.length);

выдают нули. Чтобы добавить свои элементы типа <input type="date"> в любое место на странице мне нужен доступ к любому элементу, который стандартно получается с помощью: document.getElementsByTagName,
document.getElementById,
document.getElementByName
но, когда я ставлю эти функции в начало скрипта, они почему то выдают null и ни один из моих html элементов не находят.
Ответить с цитированием
  #4 (permalink)  
Старый 15.01.2015, 19:39
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

<script>
alert( document.getElementById("test") );
</script>
<input id="test">
<script>
alert( document.getElementById("test") );
</script>
Ответить с цитированием
  #5 (permalink)  
Старый 15.01.2015, 19:42
Аватар для EmperioAf
Профессор
Отправить личное сообщение для EmperioAf Посмотреть профиль Найти все сообщения от EmperioAf
 
Регистрация: 15.01.2015
Сообщений: 622

Сообщение от Sweet Посмотреть сообщение
<script>
alert( document.getElementById("test") );
</script>
<input id="test">
<script>
alert( document.getElementById("test") );
</script>
ваш код выдаёт в моём браузере сначала null потом [object HTMLInputElement]
Может быть у меня что то не подключено?
Ответить с цитированием
  #6 (permalink)  
Старый 15.01.2015, 19:49
Аватар для EmperioAf
Профессор
Отправить личное сообщение для EmperioAf Посмотреть профиль Найти все сообщения от EmperioAf
 
Регистрация: 15.01.2015
Сообщений: 622

То есть скрипт всегда должен быть после HTML-тегов и только тогда он работает корректно?
Спасибо.
Ответить с цитированием
  #7 (permalink)  
Старый 15.01.2015, 20:00
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

EmperioAf,
или в window.onload
Ответить с цитированием
  #8 (permalink)  
Старый 18.01.2015, 14:32
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

EmperioAf, это потому что к моменту срабатывания скрипта элемента на странице ещё. Либо в конец страницы ставь скрипты, либо оборачивай в события: load или DOMContentLoaded.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Парсинг рамблер кассы Sub-zerro Общие вопросы Javascript 10 19.02.2018 23:13
Uncaught TypeError: Cannot read property 'getElementById' of null kilohertz_. AJAX и COMET 5 07.12.2014 08:04
Растянуть элемент по содержимому AnToxa Элементы интерфейса 11 09.04.2012 22:13
скрипт выдает ошибку z is null sedoyksa ExtJS 8 07.11.2011 10:58
Удалить ряд символов перед или после курсора до определенного сивола brd Javascript под браузер 3 30.10.2009 08:20