У меня проблема с попыткой выяснить, почему мое динамически добавленное событие onclick ничего не делает. Я уже много раз искал сайты, но ничего не пробовал. Зная, что это, наверное, какая-то глупая ошибка, но я действительно хочу знать, что я сделал не так. Это часть моего кода, включая соответствующие функции:
function ChangeNumber(line){ //this is just a test function so far :)
document.getElementById('maincol').innerHTML += line + "<br/>"; //just adds "something to the end of a div"
}
function ChangeSize()
{
var rows, cols;
rows = document.getElementById('rows').value;
cols = document.getElementById('cols').value;
var tbody = document.getElementById('model');
tbody.innerHTML = "";
for (var i = 0; i < rows; i++){
var tr = document.createElement('tr');
for (var j = 0; j < cols; j++){
var td = document.createElement('td');
td.setAttribute('name', (i * cols) + (j + 1));
td.onclick = function() {ChangeNumber('something'); };
td.innerHTML = "0";
tr.appendChild(td);
}
tbody.appendChild(tr);
}
}
Создание таблицы отлично работает и вызывает функцию ChangeNumber()
из статически созданного onclick, но когда я нажимаю на динамически созданный тд, ничего не происходит. Может кто-нибудь прояснить мне эту проблему?
Быстрый JSFiddle показывает, что основной подход является тонким --at наименее в Chromium.
tbody_x = document.getElementById('x');
tbody_x.innerHTML = '';
for (row = 0; row < 5; row++)
{
tr = document.createElement('tr');
for (col = 0; col < 10; col++)
{
td = document.createElement('td');
td.setAttribute('name', 'r' + row + 'c' + col);
td.onclick = function() { ChangeNumber('hi'); };
td.innerHTML = '0';
tr.appendChild(td);
}
tbody_x.appendChild(tr);
}
Что-то еще должно быть сломано. (Попробуйте запустить Firebug или аналогичный и искать JS-ошибки в консоли.)
Вы также можете использовать:
td.onclick = ChangeNumber;
ChangeNumber
- это функция, которая также может быть привязана к клику, если вы разместите эту функцию внутри, вы можете создать пользовательскую функцию для каждого onclick.
Я знаю, с какими проблемами он сталкивается, и это просто, что функция onclick не poppup, она не показывает никаких журналов, и если вы используете td.onclick = ChangeNumber();
то он просто запускает эту функцию один раз при загрузке этого скрипта,
Ваш подход кажется прекрасным, PLS найти здесь: (jsfiddle.net/fa9SV/)
Пожалуйста, просто перекрестно проверьте, что все идентификаторы существуют в документе. Надеюсь это поможет!
Вы должны настроить onclick
как атрибут. Итак, вместо
td.onclick = function() {ChangeNumber('something'); };
вам нужно что-то вроде
td.setAttribute('onclick', "function() {ChangeNumber('something');}");
При создании элемента HTML вы должны использовать setAttribute для его установки. Кроме того, вам понадобится сделать эту строку.
Итак, что-то вроде:
td.setAttribute('onclick', 'function(){change("Something")}');
В качестве альтернативы вы можете сделать следующее:
td.setAttribute('onclick', 'changeSomething();');
Затем определите свой скрипт где-нибудь на своем глобальном объекте, например:
changeSomething = function() {
// do the change
}
Третий вариант - использовать библиотеку событий. Тогда вы сможете сделать что-то вроде:
Event.on(td, 'click', changeSomething);
Проверьте этот вопрос, чтобы понять, что я имею в виду.
PS Это вне сферы действия этого вопроса, но лучше не связывать вещи с глобальным объектом. Используйте модуль или что-то в этом роде.
Then define your script somewhere on your global object, like this:
step?