Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Конфликт между document.getElementById() (https://javascript.ru/forum/misc/42948-konflikt-mezhdu-document-getelementbyid.html)

aH6y 15.11.2013 04:11

Конфликт между document.getElementById()
 
Здравствуйте уважаемые форумчане =)
Помогите пожалуйста ;)

Есть код:

var tmp_linkpricelow = Array;
var linklabel = Array;
var n = 1;

tmp_linkpricelow[n] = document.getElementById("linkpricelow" + n);
tmp_linkpricelow[n].placeholder = (localStorage["linkpricelow" + n] == ('' || 0)) ? '' : localStorage["linkpricelow" + n];

console.log("1.pricelowholder =" + tmp_linkpricelow[n].placeholder);

linklabel[n] = document.getElementById("linklabel" + n);
linklabel[n].innerHTML = (localStorage["linkname" + n] == '') ? 'nope' : "<a href=\"" + localStorage["link" + n] + "\"target=\"_blank\">" + localStorage["linkname" + n] + "</a>";

console.log("2.pricelowholder =" + tmp_linkpricelow[n].placeholder);


Есть html:

<div class="form__row form__row_msg-list">
    <div class="form__row__label label_yes">
        <label for="interface" id="linklabel1">link 1</label>
    </div>
        <div class="form__row__widget">
            <div>
                <input class="info" value="" placeholder="steam link" id="link1" size="45">
            </div>
        </div>
    <div><input class="info" value="" id="linkpricelow1" size="1"></div>
</div>


localStorage - переменная расширения в Google Chrome

Вопрос: почему в консоль вывод правильный работает только если отключить строку:
linklabel[n] = document.getElementById("linklabel" + n);

Кто объяснит такое странное явление?
Спасибо заранее

Deff 15.11.2013 05:06

aH6y,
Цитата:

Сообщение от aH6y
linklabel[n] = document.getElementById("linklabel" + n);

По идее id элементов уже и есть глобальная переменная
т.е во многих браузерах по умолчанию:

linklabel == document.getElementById("linklabel")

Поэтому лучше не создавать подобные идентичные глобальные переменные а работать с ними locale , в замыкающей функции

<div id="aaa">111222</div>
<script type="text/javascript">
alert(aaa == document.getElementById("aaa"))
alert(aaa.innerHTML)
</script>


<script type="text/javascript">
(function(){
var aaa =1;
alert(aaa == document.getElementById("aaa"))
alert(aaa.innerHTML)
}())
</script>

aH6y 15.11.2013 10:34

А если нужно вынести эту переменную в другую функцию, то как?

Создать глобальную переменную и в нее записать содержимое linklabel?

Deff 15.11.2013 10:59

aH6y,
Напишите иное имя - и проблем нет

My_linklabel
или создать глобальный объект и плодите в нём сколько пожелаете
My = {}
My.linklabel=[];
My.blaBlaBla=...
My.tryams = ...

aH6y 15.11.2013 13:39

Проблема в неправильном объявлении переменных. Вместо
var tmp_linkpricelow = Array;
var linklabel = Array;

Нужно писать так:
var tmp_linkpricelow = new Array();
var linklabel = new Array();

Всем спасибо ;)

animhotep 15.11.2013 16:46

не за что
var tmp_linkpricelow, linklabel = [];


Часовой пояс GMT +3, время: 17:13.