Вместо того, чтобы назначать и пытаться использовать атрибут ID, вы можете настроить таргетинг на выбранный элемент, сославшись на свойство самого event
. Если бы вы проанализировали event
(используйте консоль), вы бы заметили несколько свойств - target
разрешает доступ к самому элементу, что помогает упростить функцию showOptions
. В этом случае вы также можете просто использовать this
для ссылки на саму кнопку изнутри showOptions
, что сделает его еще проще - например, this.style.backgroundColor='red';
let bttns=[];
const generateBoard=function( s=100 ){
const showOptions=function(e){
e.target.style.backgroundColor='red';
};
for( let i=0; i < s; i++ ){
/* create a new button and add properties */
let bttn=document.createElement('button');
bttn.setAttribute('id',i);
bttn.setAttribute('data-x',((i+10)%10));
bttn.setAttribute('data-y',Math.floor(i/10));
bttn.style.left=( Math.floor( i / 10 ) * 100 )+'px';
bttn.style.top=( ( i % 10 ) * 100 )+'px';
bttn.style.width = '50px';
bttn.style.height = '40px';
bttn.style.position = 'absolute';
bttn.innerText=i;
/* bind event listener */
bttn.addEventListener('click', showOptions );
/* add to the DOM */
document.body.appendChild( bttn );
/* if it is important to have in an array... */
bttns.push( bttn );
}
}
document.addEventListener('DOMContentLoaded',(e)=>{
generateBoard( 100 );
})
Добавление произвольных атрибутов к элементам - не лучшая практика - вместо назначения x
и y
вам следует использовать атрибуты dataset
, поэтому data-x
и data-y
будет правильным.