У меня есть проблема с этим яваскриптом кода:Javascript классов и обработчики событий
function MyClass() {
var id_nr = Math.ceil(Math.random() * 999999);
this.button_id = 'button_' + id_nr;
}
MyClass.prototype = {
createButton: function() {
var msg = 'Button \'' + this.button_id + '\' was clicked';
var my_button = (
'<input type="button" id="'
+ this.button_id
+ '" value="Click Me" /\>'
);
document.body.innerHTML += '<div>' + my_button + '</div>';
document.getElementById(this.button_id).onclick = function() { alert(msg); }
}
};
window.onload = function() {
var s = new MyClass();
s.createButton();
};
Да, текущий код работает нормально. Но проблема возникает, когда я добавить более одного MyClass объектов:
window.onload = function() {
var s = new MyClass();
s.createButton();
var w = new MyClass();
w.createButton();
/* ...and many other buttons */
};
По какой-то причине OnClick событие будет срабатывать только при нажатии кнопки, которая была создана в прошлом. И я не знаю, почему.
Один из способов может быть что-то вроде этого:
<input type="button" onclick="javascript:doSomeThing();" />
Но, к сожалению, это не правильное решение правый ряд, потому что моя цель состоит в том, что onclik событие должно быть в состоянии назвать еще методы класса, а также. (Эти методы еще не созданы).
Как я могу сделать этот код работоспособным? Приветствуется всякая помощь.
Я уже пробовал jQuery, но такая же ошибка остается. Кроме того, идентификаторы ID не могут быть причиной здесь: каждый элемент ввода будет иметь уникальный идентификатор в этом коде. – user2266705
Изменил мой ответ, я неправильно понял, как были созданы ваши идентификаторы. – Sunyatasattva
Я также добавил некоторые рабочие примеры в JSBin, проверьте их! :) – Sunyatasattva