2013-03-25 4 views
0

У меня есть эта функция, которая читает координацию из XML-файла, функция отлично работает, когда она свободна в окне. но когда я помещаю его внутрь функции, я получаю ошибку. Cannot read property 'style' of null. по строке 127.Uncaught TypeError: Не удается прочитать свойство 'style' of null

Строка 127 является

document.getElementById(id).style.top=Ynod; 

Любые идеи?

var main = (function() { 

    var id=Math.floor((Math.random()*1000000)+1); 


    document.getElementById("add-new-sticker-btn").addEventListener("click", function(){ 
     id += 1; 
     console.log(id); 
     add_sticker(""); /**"" removes undefined "*/ 

     var xmlhttp; 
     xmlhttp=new XMLHttpRequest(); 
     xmlhttp.open("POST","/project2/php/insert.php",true); /*Search way... JS to javaScript*/ 
     xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
     xmlhttp.send("textBoxID="+id); 
    }); 


    function run() { 
     readXml(); 
    } 

    function readXml() { 
     var xmlhttp; 
     xmlhttp = new XMLHttpRequest(); 
     xmlhttp.open("get", 'xml/stickers.xml', false); 
     xmlhttp.send(); 
     var myXML = xmlhttp.responseXML; 
     stickers = myXML.getElementsByTagName("sticker"); 

     for (i = 0; i < stickers.length; i++) { 
      var idNod = (stickers[i].getElementsByTagName("id")[0].childNodes[0].nodeValue); /*Get the ID*/ 
      var id = idNod; 
      var textNod = (stickers[i].getElementsByTagName("text")[0].childNodes[0].nodeValue); /* Text*/ 
      add_sticker(textNod); /*Call creator function*/ 

      var Xnod = (stickers[i].getElementsByTagName("x")[0].childNodes[0].nodeValue) + 'px'; /*Get the x position Add PX for pixel*/ 
      var Ynod = (stickers[i].getElementsByTagName("y")[0].childNodes[0].nodeValue) + 'px'; /*Get the y position*/ 
      var Znod = (stickers[i].getElementsByTagName("z")[0].childNodes[0].nodeValue); /*Get the y position*/ 
      console.log(Ynod) // Gives correct Y and X 
      console.log(Xnod) 

      document.getElementById(id).style.top = Ynod; 
      document.getElementById(id).style.left = Xnod; 
      document.getElementById(id).style.zIndex = Znod; 
     } 
    } 

    window.addEventListener("load", run); 
    return {}; 
}()); 
+2

Это означает, что 'document.getElementById (идентификатор)' не может найти элемент с указанным 'id'. – VisioN

+0

@VisioN точно, но у меня есть элемент Id, где он должен быть? или Im я называю это неправильно? – Dymond

+2

[Узнайте, как отлаживать JavaScript] (http://www.netmagazine.com/tutorials/javascript-debugging-beginners). Установите контрольные точки, выполните шаг и шаг кода и убедитесь, что каждая переменная имеет значение, которое вы ожидаете от нее. Сообщение об ошибке понятно, но поскольку мы не можем запускать код или знать данные, мы не можем сказать больше. –

ответ

1

idNod неопределен, убедитесь, что есть элементы наклейки и попробуйте напечатать наклейки [I] .getElementsByTagName ("ID") [0] .childNodes на консоль.

+0

Откуда вы знаете, что это 'undefined'? Это может быть что угодно. –

+0

@JimCresswell well Его не определено, так как я получаю значение идентификатора корня, когда om console.logging. – Dymond

+1

Вы делаете хороший момент, извинившись за то, что не читаете достаточно внимательно. Если идентификатор верен, я думаю, что элемент не находится в DOM в этой точке, как говорит @FelixKling, отладка - это путь вперед. Извините за то, что вы не стали более полезными. – JimCresswell

0

Okej Я нашел проблему самостоятельно. я звоню глобальный переменный вар id = idNod; Если я изменил var id = idNod; только id=idNod все работало :)

Смежные вопросы