2015-04-08 3 views
0

Почему слушатель работает только на одном td?Как добавить слушателя в элемент td?

Вот fiddle.

document.getElementById(x).addEventListener("click",showStatusDialog); 

эта линия работает только на одном пункте в то время как тревога в комментарии работает хорошо для всех td элементов.

+1

Я почти гарантировать, что никто не будет отвечать, если не очистить этот беспорядок (а) код первого , – OddDev

+0

Вы также можете рассмотреть делегирование слушателя родительскому элементу и использование распространения событий (ака пузырьков). Один слушатель лучше многих. – Andy

+0

Похожий вопрос: http://stackoverflow.com/questions/1634346/addeventlistener-only-works-on-last-object –

ответ

1

Потому что, когда вы добавляете строки с innerHTML, вы уничтожаете все события, связанные с его братьями и сестрами. Поэтому каждую добавленную строку вы уничтожаете предыдущие события. Вот почему только последний элемент имеет событие click.

Вы должны либо использовать делегирование событий или построить строку с document.createElement() и appendChild()

//outside the loop 
var tbody = document.querySelector("#tfhover tbody"); 


var tr = document.createElement("tr"); 
var td1 = document.createElement("td"); 
td1.innerHTML = json2[i].rank; 
var td2 = document.createElement("td"); 
td2.innerHTML = json2[i].content; 
var td3 = document.createElement("td"); 
td3.innerHTML = json2[i].UID; 
td3.id = "uid"+i; 
td3.addEventListener("click",showStatusDialog); 
tr.appendChild(td1); 
tr.appendChild(td2); 
tr.appendChild(td3); 
tbody.appendChild(tr); 
+0

, где этот код идет? Я прошел мимо него в цикле и ничего не произошло – AshBringer

+0

Пропустил строку, нужно добавить строку в таблицу – epascarello

+0

Результат: https://jsfiddle.net/syLuLob0/1/: S – AshBringer

1

Я понимаю, что вы код, хотя это немного беспорядочно, но я не уверен, что я должен дать вам ответ, потому что я буду учить вас плохим практикам, как ваш код. Но то, что вы хотите узнать о Event Делегация здесь некоторые действительно хорошие источники:

Source 1

First link is by codepen and it says I needed some code so I'm pretending this is code. 

Source 2

Source 3

Source 4

Внимание:

Пожалуйста, не голосуйте. Я не хотел комментировать это, потому что было бы неплохо читать. Поэтому, если кто-то собирается дать ответ на прямой вопрос, пожалуйста, не стесняйтесь. Я просто верю, что @BipBip хотел бы узнать о делегировании событий.

Thank you.

+0

Это ссылка только ответ ... пожалуйста, укажите код в ваших ответах на руководящие принципы сайта – charlietfl

+0

Я в замешательстве? Что вы хотите, чтобы я предоставлял. Я не отвечаю. Но это не выглядело бы хорошо в комментарии. Он не должен принимать мой ответ. Кто-то может дать ему ответ прямо на свой вопрос. –

+0

хорошо, если вы не предоставляете ответ, используйте блоки комментариев или покажите OP, как использовать делегирование делегирования, и превратите это в правильный ответ. – charlietfl

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