私はインターネットで見つけた方法でボタンを動的に作成します:
Page = function(...) {
...
};
Page.prototype = {
...
addButton : function() {
var b = content.document.createElement('button');
b.onclick = function() { alert('OnClick'); }
},
...
};
残念ながら、機能せず、次のエラーがスローされます。
Error: [Exception... "Component is not available" nsresult: "0x80040111
(NS_ERROR_NOT_AVAILABLE)" location: "JS frame :: chrome://knowledgizer/content
/knowledgizer.js :: <TOP_LEVEL> :: line 137" data: no]
Source File: chrome://browser/content/tabbrowser.xml Line: 434
SetAttributeを使用したソリューションは次のように機能します。
b.setAttribute("onClick", "alert('OnClick')");
ただし、(アラートではなく)クラスメソッドを呼び出したいのですが、b.onclick構文はその点で見栄えが良いと思います。このonclickケースはセンシティブですか?私が書いた場合
b.onClick = function() {alert("OnClick");} // notice the spelling onclick vs onClick
上記のエラーは発生しませんが、まだ機能していません。つまり、アラートが表示されません。ヒントがあればありがたいです。
おまけの質問として:ボタンがクリックされたときに現在のページがリロードされるのをどのように回避できますか?私はメソッドを呼び出すのが好きで、ページをリロードさせません。
よろしくお願いします、
キリスト教徒
var foo = function(){
var button = document.createElement('button');
button.innerHTML = 'click me';
button.onclick = function(){
alert('here be dragons');return false;
};
// where do we want to have the button to appear?
// you can append it to another element just by doing something like
// document.getElementById('foobutton').appendChild(button);
document.body.appendChild(button);
};
入力用の属性を持つバージョンは次のとおりです。
<button onclick="myFun()">Add More</button>
<script>
function myFun() {
var x = document.createElement("INPUT");
x.setAttribute("type", "file");
x.setAttribute("id", "file");
document.body.appendChild(x);
x.onchange = function () {
hello();
};
btn.appendChild(t);
document.body.appendChild(btn);
}
function hello() {
window.alert("hello!");
}
</script>