#javascript #html #object #refresh
#javascript #HTML #объект #обновить
Вопрос:
Я просматривал этот код, который я пишу снова и снова, но, похоже, не могу найти, в чем проблема. То, что я пытаюсь сделать, это иметь скользящую панель, которая появляется на экране, например, индикатор здоровья / маны. Вот функция, которую я использую для создания панели:
function makeBar(max,color,place){
b=new Object();
len=bar.length;
bar.push(b);
b.index=len;
b.place=place;
b.color=color;
b.max=max;
b.val=max;
b.print=function(){
this.place.innerHTML ="<div id='bar" this.index "' style='display:inline-block;text-align:center;height:40px;width:200px;border:3px outset black;'><div id='subBar" this.index "' style='font-size:20pt;height:34px;width:1px;background:" this.color ";border:3px outset " this.color ";'></div></div>";
this.container=document.getElementById('bar' this.index);
this.content=document.getElementById('subBar' this.index);
}
b.refresh=function(){
this.content.style.width=(this.val/this.max)*194 "px";
}
b.print();
}
Таким образом, он создает и «печатает» панель идеально.
Но когда я пытаюсь использовать
bar[0].refresh();
Он ничего не делает, если только bar [0] не является единственным баром.
По сути, только последний созданный бар может успешно использовать свой собственный метод refresh().
Кто-нибудь может мне помочь?
Спасибо every1
Комментарии:
1. Не могли бы вы, плз, создать скрипку, демонстрирующую проблему? jsfiddle.net
Ответ №1:
Есть ли функция обновления объекта B? Вы можете попробовать создать «b» в качестве глобальной переменной вместо того, чтобы использовать ее локально.
т.е.
var b;
function makeBar(max,color,place){
b=new Object();
len=bar.length;
//bar.push(b); don't push here
b.index=len;
b.place=place;
b.color=color;
b.max=max;
b.val=max;
b.print=function(){
this.place.innerHTML ="<div id='bar" this.index "' style='display:inline-block;text-align:center;height:40px;width:200px;border:3px outset black;'><div id='subBar" this.index "' style='font-size:20pt;height:34px;width:1px;background:" this.color ";border:3px outset " this.color ";'></div></div>";
this.container=document.getElementById('bar' this.index);
this.content=document.getElementById('subBar' this.index);
}
b.refresh=function(){
this.content.style.width=(this.val/this.max)*194 "px";
}
b.print();
}
Если вы хотите использовать один экземпляр объекта b, то не используйте array. Звоните b.refresh()
напрямую.
Комментарии:
1. когда я использую Chrome ‘Inspect Element’ после создания 2 экземпляров bar и ввода bar [0] и bar [1] соответственно в консоль, bar [0] имеет div #bar0 и div #subBar0 в качестве свойств контейнера и содержимого соответственно, которые являются реальными элементами на странице, но когда я навожу на него курсор мыши, он не выделяет элемент, как это происходит с bar[1] . То же самое верно, если я создаю много баров. Это сделает только последний созданный объект bar. И я понятия не имею, почему…