Вход

Просмотр полной версии : Конфликт между document.getElementById()


aH6y
15.11.2013, 04:11
Здравствуйте уважаемые форумчане =)
Помогите пожалуйста ;)

Есть код:

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,
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 = [];