この 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イベントがトリガーされます。理由はわかりません。
1 つの回避策は次のようになります。
<input type="button" onclick="javascript:doSomeThing();" />
しかし残念ながら、これは適切な解決策ではありません。なぜなら、私の目標は onclik イベントが別のクラス メソッドも呼び出せるようにすることだからです。(これらのメソッドはまだ作成されていません)。
このコードを正しく動作させるにはどうすればよいですか? どんな種類の助けも大歓迎です。