1
var button = document.createElement("button");
button.type = "button";

button.className = "button";
button.innerText = "OK";
button.addEventListener("click", function () {
    console.log("Hello!");
}, false);

これを行うと、ボタンがそのイベントリスナーを取得することはありません。、、を試しましたがattachEventbutton.onclick何も機能しないようです。ボタンはクラスとテキストでうまく表示されます。

編集:基本的に私がやろうとしているのは、プログラムでdivの「ポップアップ」配列を表示することです。

これがどのように見えるかのスクリーンショットです:http://i.imgur.com/IqaOq.png、そして私はそれを次のように設定しました:var x = new JMTK.Custom.MessageDialog()そしてポップアップを追加するために、私はただタイプしますx.addMessage({template: {type: JMTK.Custom.MessageDialog.templates.alert, title: "Alert title", message: "This is a message here", button1: {text: "Hello"}}})

これはaddMessage()

var content = document.createElement("div"); 
//htmlObject.template is the object that has all the info, 'this' is the scrim element that contains each "white" popup"
content.innerHTML = MessageDialogClass.html.alert(htmlObject.template, this).innerHTML

これはこの関数を呼び出します:

alert: function (template, element) {
    //Array of functions
    var callbacks = MessageDialogClass.callbacks;

    var alert = document.createElement("div");
    var id = Date.now();
    alert.id = id;
                
    var header = document.createElement("h1");
    header.innerText = (template.title ? template.title : "ALERT");

    var paragraph = document.createElement("p");
    paragraph.innerText = (template.message ? template.message : "No message specified")

    var button = document.createElement("button");
    button.type = "button";

    button.className = "button";
    button.innerText = (template.button1.text ? template.button1.text : "OK");
    button.addEventListener("click", function () {
        if (template.button1.callback) {
            template.button1.callback();
        }

        //MessageDialogClass.popElement(id);
        //delete callbacks.id;
    }, false);

    alert.appendChild(header);
    alert.appendChild(paragraph);
    alert.appendChild(button);

    callbacks.id = alert;

    return alert;
},            

しかし、繰り返しになりますが、ボタンをクリックしても何も起こらず、DOMエクスプローラーにはonclick属性がありません。

4

3 に答える 3

0

問題はdiv、「アラート」テンプレートで を作成し、別の div の innerHTML をその div に設定していたことです。DOM の一部ではないため、イベント リスナーを設定することはできません。

だから代わりに

var content = document.createElement("div"); 
//htmlObject.template is the object that has all the info, 'this' is the scrim element that contains each "white" popup"
content.innerHTML = MessageDialogClass.html.alert(htmlObject.template, this).innerHTML

今やりました

var content = document.createElement("div"); 
//htmlObject.template is the object that has all the info, 'this' is the scrim element that contains each "white" popup"
content = MessageDialogClass.html.alert(htmlObject.template, this).innerHTML

すでにalertを返しているためです。divつまり、DOM ノードと等しく設定するだけでなく、innerHTML を設定する必要がありました。

于 2013-04-01T13:30:44.980 に答える
0

あなたの解決策が何であるかを言うのは難しいです。ボタンのクリックで何をしたいのかについての詳細を提供してくれましたが、何か他のことが起こっているのではないかと心配しています。ボタンの前に、マウスのクリックを受け取らないようにする要素があるのだろうか。あなたは Windows 8 の WinJS プロジェクトに参加しているようですね。VS2012 には本当に優れた開発ツールがあります。ボタンを DOM に追加した直後にブレークし、DOM Explorer に移動して、ボタンが見つかるかどうかを確認します。JavaScript コンソールに移動し、ボタンにアクセスできるかどうかを確認します。そこにイベントリスナーを手動で追加できるかどうかを確認してください。マークアップにボタンを手動で追加してみて、イベントの追加が機能するかどうかを確認してください。これらのいずれかが解決策につながることを願っています。幸運を。

于 2012-12-28T16:25:39.520 に答える
-2

イベントリスナーを設定する前にボタンを追加する必要があると思います。

于 2012-12-28T00:28:24.763 に答える