2016-11-04 2 views
-1

Also was auch immer den Fehler verursacht muss tatsächlich in dieser Schleife sein: Erstellen einer Box durch Aufrufen des GridBox-Konstruktors auf eigene Arbeit. Die von der buildField-Funktion erstellten Objekte geben jedoch kein On-Click-Ereignis zurück.HTML-Button erstellt in Objektkonstruktoren onclick -Ereignis funktioniert nicht

var grid = []; 
function buildField(size){ 
    //loops through each row 
    for(var y=0; y<size;y++){ 
     //loops through each column 
     grid[y]=[]; 
     for(var x=0; x<size; x++){ 
      //create new object for grid 
      grid[y][x] = new gridBox(x,y); 
     } 
     document.getElementById("board").innerHTML += "<br>"; 
    } 
} 

function gridBox(x,y){ 
    this.x=x; 
    this.y=y; 
    var me = this; 
    //function to create and add button. 
    function makeBtn(){ 
     var btn = document.createElement("BUTTON"); 
     btn.type = "BUTTON"; 
     btn.className = "gridButton"; 
     btn.value = "BUTTON"; 
     btn.name = me; 
     btn.onclick = function(){ 
      console.log("click"); 
     }; 
     document.getElementById("board").appendChild(btn); 
     console.log("madeButton"); 
    } 
    makeBtn(); 
} 
+0

Anstatt die onclick-Eigenschaft einzurichten, haben Sie versucht, den Callback über 'btn.addEventListener()'? –

+0

http://jsbin.com/vihuwis/1/edit?html,js,output - funktioniert gut, wenn ich es teste. – Quentin

+0

Es gibt genügend Code dort, um das Problem zu verstehen, aber Sie sollten wirklich eine [MCVE] – Quentin

Antwort

0
document.getElementById("board").innerHTML += "<br>"; 

Dies wird:

  1. Convert das DOM zu HTML
  2. hinzufügen <br> zu diesem HTML
  3. , dass HTML-DOM Convert
  4. die bestehende DOM Überschreiben mit diesem

... die onclick Event-Handler nicht Teil der serialisierten HTML sein wird, so wird sie verloren, wenn Schritt 4 passiert.

Verwenden Sie erneut createElement und appendChild. Verwenden Sie nicht innerHTML.

+0

Das reparierte es danke! Ich werde in Zukunft vorsichtiger mit innerHTML sein. – MadEste

-2

Versuchen mit:

btn.addEventListener('click', function(){ }); 

statt Ihrer btn.onclick

+0

erstellen Warum sollte das Problem behoben? – Quentin

-1

Dies ist für mich arbeiten:

function gridBox(x,y){ 
 
    this.x=x; 
 
    this.y=y; 
 
    var me = this; 
 
    //function to create and add button. 
 
    function makeBtn(){ 
 
     var btn = document.createElement("BUTTON"); 
 
     btn.className = "gridButton"; 
 
     btn.textContent = "Click Me"; 
 
     btn.name = me; 
 
     btn.onclick = function(){ 
 
      console.log("click"); 
 
     }; 
 
     document.getElementById("board").appendChild(btn); 
 
     console.log("madeButton"); 
 
    } 
 
    makeBtn(); 
 
} 
 

 
gridBox(10,10);
.gridButton { 
 
    height:30px; 
 
    width:100px; 
 
}
<div id=board></div>

+0

Eine Down-Abstimmung weniger als eine Sekunde nach dem Posten? "Ja wirklich?" –

+0

Wenn Sie das Problem nicht reproduzieren können, sagen Sie dies in einem Kommentar, keine Antwort. – Quentin

+0

@Quentin Zuerst können Sie meine Antwort möglicherweise nicht gelesen haben, bevor Sie sie abstimmen, weil sie sofort war. Zweitens zeige ich einen Code, der das tut, was der OP versucht, und beweist, dass das Problem nicht bei diesem Code liegt, und dies deshalb aus dem Verdacht zu entfernen. Der Eliminierungsprozess ist eine vollkommen gültige Form der Problemlösung. –

-1

Versuchen Sie btn.onClick nach Dokument ... appendChild (..): das funktioniert für mich

function gridBox(x,y){ 
 
    this.x=x; 
 
    this.y=y; 
 
    var me = this; 
 
    //function to create and add button. 
 
    function makeBtn(){ 
 
     var btn = document.createElement("BUTTON"); 
 
     btn.type = "BUTTON"; 
 
     btn.className = "gridButton"; 
 
     btn.value = "BUTTON"; 
 
     btn.name = me; 
 
     document.getElementById("board").appendChild(btn); 
 
     btn.onclick = function(){ 
 
      console.log("click"); 
 
     }; 
 
     console.log("madeButton"); 
 
    } 
 
    makeBtn(); 
 
} 
 
// make simple button 
 
gridBox(10,10);
<div id="board"> 
 
    
 
</div>

+1

Es funktioniert auch wie es ursprünglich ist. –

+0

Also was ist der Sinn? – Aryanio

+0

'onClick' funktioniert nicht, die Eigenschaft wird' onclick' genannt und bei JavaScript wird zwischen Groß- und Kleinschreibung unterschieden. Das Verschieben nach dem Anhängen wird auch keinen Unterschied machen, da der Code in der Frage damit in seiner ursprünglichen Position arbeitet. – Quentin

Verwandte Themen