У меня проблема с созданием / обновлением HTML-элементов.- Javascript

#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. И я понятия не имею, почему…