2017-06-05 4 views
0

HTMLWie fügt man Ereignis-Listener zu Elementen hinzu, die dynamisch im Prototyp erstellt werden?

<div id="main"></div> 

JS

var TestClass = function() {}; 
TestClass.prototype = { 
    addElement: function(parentId) { 
    var parent = document.querySelector('#' + parentId); 
    var a = document.createElement('a'); 
    a.textContent = '+'; 
    a.href = '#'; 
    a.addEventListener('click', this.onElementClick, false); //nothing happens on click 
    parent.innerHTML = a.outerHTML; 
    }, 

    onElementClick: function() { 
    console.log('dynamic element clicked'); 
    } 
}; 

new TestClass().addElement('main'); // on DOM ready 

Ausgabe

<div id="main"><a href="#">+</a></div> 
+0

Versuchen Sie, "parent.innerHTML = a.outerHTML" in "parent.append (a);' – Arg0n

Antwort

1

So:

var TestClass = function() {}; 
 
TestClass.prototype = { 
 
    addElement: function(parentId) { 
 
    var parent = document.getElementById(parentId); //Changed to getElementById 
 
    var a = document.createElement('a'); 
 
    a.textContent = '+'; 
 
    a.href = '#'; 
 
    a.addEventListener('click', this.onElementClick, false); 
 
    parent.append(a); //Changed 
 
    }, 
 

 
    onElementClick: function() { 
 
    console.log('dynamic element clicked'); 
 
    } 
 
}; 
 

 
new TestClass().addElement('main'); // on DOM ready
<div id="main"></div>

Sie nicht hinzu, Ihre a-parent, stattdessen haben Sie einfach HTML hinzugefügt.

+0

Oh Mann !!! Vielen Dank. Bier für dich. – niksofteng

+0

@niksofteng Kein Problem, bitte upvote und markiere als Antwort, wenn dir das weitergeholfen hat. – Arg0n

1

Sie die Ereignis-Listener hinzufügen, richtig, aber vergessen, das Element hinzuzufügen.

Ich habe document.body.append(a) zu der addElement Methode hinzugefügt.

Dies führt zu den folgenden Code:

var TestClass = function() {}; 
TestClass.prototype = { 
    addElement: function(parentId) { 
    var parent = document.querySelector('#' + parentId); 
    var a = document.createElement('a'); 
    a.textContent = '+'; 
    a.href = '#'; 
    a.addEventListener('click', this.onElementClick, false); 
    document.body.append(a); 
    parent.innerHTML = a.outerHTML; 
    }, 

    onElementClick: function() { 
    console.log('dynamic element clicked'); 
    } 
}; 

new TestClass().addElement('main'); // on DOM ready 

Test it out here

+0

zu ändern. Nun ist parent.innerHTML = a.outerHTML unnötig und Sie wollen parent.append (a); ... –

+0

Ich zögere, an den Körper anzuhängen. Warum Körper? – niksofteng

+0

Der gesamte sichtbare Inhalt befindet sich entweder in "body" oder in einem seiner untergeordneten Elemente. Habe mir einfach 'body' als Beispiel genommen. Das zu sagen, ist für Ihren Anwendungsfall mit 'parent.append (a)' sinnvoller (nach @ Arg0ns Antwort). –

Verwandte Themen