2016-10-03 2 views
0

Я хотел бы создать список дивы, один из див хотел это:добавить OnClick события динамически создавать элемент

<div onclick="myFunc(this, 'arrayValue')"></div> 

Я хочу, чтобы достичь этого перебирая мой массив и передавая значение индекса в моя функция. Одним из решений, которые работали использовал setAttribute:

for(var i = 0; i < array.length; i++){ 
    var div = document.createElement("div"); 
    div.setAttribute("onclick", 'myFunc(this, \''+array[i]+'\')'); 
    myDiv.appendChild(div); 
    } 

Единственная проблема заключается в том, что эта часть выглядит очень некрасиво: \''+array[i]+'\')' Есть другой способ для достижения этой цели? Это будет выглядеть так или что-то подобное:

div.setAttribute("onclick", myFunc(this, array[i]); 

кстати. другие решения: когда я использовал div.onclick, onclick attr не был виден на div (результат: <div></div>), возможно, я сделал что-то не так.

+0

Возможный дубликат [onClick event в цикле For] (http://stackoverflow.com/questions/15860683/onclick-event-in-a-for-loop) –

+0

The * "... эта часть выглядит действительно уродливая "часть делает это лучше подходит для обзора кода. –

+0

* «другие решения» * часть будет на тему, если вы продемонстрируете, что вы на самом деле сделали, и описали, что было не так, и что вы подразумеваете под * «... attr не было видно» *. Однако это почти наверняка будет дублировать. –

ответ

1

var array = ['bla1','bla2']; 
 

 
var myFunc = function(value) { 
 
    alert('click : '+ value); 
 
}; 
 

 
var myDiv = document.getElementById('myDiv'); 
 

 
for(var i = 0; i < array.length; i++){ 
 
    var div = document.createElement("div"); 
 
    div.className = 'bla'; 
 
    myDiv.appendChild(div); 
 
    
 
    div.addEventListener('click', myFunc.bind(this, array[i])); 
 
}
.bla { 
 
    border: 1px solid black; 
 
    width: 20px; 
 
    height: 20px; 
 
    margin: 10px; 
 
    }
<div id="myDiv"></div>

что вы хотите?

Смежные вопросы