2016-04-03 3 views
1

Ich versuche ein jQuery CheckerBoard zu erstellen, ich habe so viel bisher, alles scheint gut zu funktionieren, aber alles, was ich eine neue Nummer eingeben, hängt es an das vorhandene Schachbrett, wie ich bearbeite Mein Code, so dass jedes Mal, wenn ich eine neue Nummer in das Eingabefeld eingibt, die Platine auf diese Größe ändert und nicht daran anfügt, hier ist, was ich bisher bekommen habe, mir wurde gesagt, dass es zwei Gründe dafür gibt dass es wächst anstatt zu resetten, zuerst ist das var checkerBoard = []; ist auf dem globalen Bereich gespeichert, schiebt mehr Checker Quadrate in das Array, und dass, um den vorherigen Inhalt zu überschreiben, muss ich .html(), obwohl nicht sicher, wie es getan werden sollte, bitte helfen HTML jQuery checkerBoard Größe

Spielbrett

<table id="gameBoard"> 
<tbody></tbody> 
</table> 

Javascript

var checkerBoard = []; 
$(document).ready(function(){ 
var function1 = function(calcs){ 

for(var i = 0; i < calcs; i++){ 

var trOdd = $('<tr>').addClass('odd'); 
var trEven = $('<tr>').addClass('even'); 

if(calcs % 2 !== 0 && i % 2 !== 0){ checkerBoard.push(trOdd); } 
else if(calcs % 2 !== 0 && i % 2 === 0) { checkerBoard.push(trOdd); } 
else if(calcs % 2 === 0 && i % 2 !== 0){ checkerBoard.push(trEven); } 
else{ checkerBoard.push(trOdd); } 

for(var j = 0; j < calcs; j++){ 
    checkerBoard[i].append('<td>'); 
} 
} 
$('tbody').append(checkerBoard); 
$(".odd td:odd").css("background-color", "red"); 
$(".odd td:even").css("background-color", "black"); 
$(".even td:odd").css("background-color", "black"); 
$(".even td:even").css("background-color", "red"); 

$('#gameBoard').css({ 
'border-collapse' : 'collapse', 
'border' : 'solid 1px black' 
    }); 
    $('td').css({ 
'width' : '30px', 
'height' : '30px' 
}); 
} 

$("[name=INPUT1]").change(function(){ 
var calc = $(this).val(); 
$("[name=OUTPUT1]").val(calc); 
console.log(calc); 
function1(calc); 
}); 
}); 

Antwort

0

Sie müssen checkerboard = []; als die erste Zeile innerhalb Ihrer Definition von function1 hinzufügen und $('tbody').append(checkerBoard); zu $('tbody').empty().append(checkerBoard); ändern. Obwohl ich empfehlen würde, die Schachbrettvariable möglichst in die Funktion zu verschieben, so dass die Variable jedes Mal neu erstellt wird, wenn function1 aufgerufen wird, anstatt eine globale Variable zu sein, die Sie löschen müssen.

Der Grund, warum Sie Ihre Schachbrett-Variable zurücksetzen müssen, ist, weil Sie derzeit checkerboard.push() verwenden, die den neuen tr an das Ende des Arrays anhängen und so machen Sie Sie alle Ihre ursprünglichen Zeilen plus die neuen Sie haben fügen hinzu.

Der Grund, warum Sie anrufen müssen .empty() ist im Wesentlichen das gleiche wie oben. .append() fügt die neuen Zeilen nach den vorhandenen Zeilen hinzu. Durch den Aufruf von .empty() werden die vorhandenen Zeilen vor dem Hinzufügen der neuen Zeilen entfernt.

+0

Ich bekomme das Schachbrett = []; local innerhalb der Funktion, aber das Hinzufügen von .empty() hat keinen Einfluss auf das Ergebnis, da ich eine neue Zahl eingib und die Eingabetaste drücke, fügt es weiterhin an. Ich muss es, wo ich 4 eingeben, und eine Größe 4 Board, dann löschen 4, geben Sie 2, und erhalten Sie eine Größe 2 Board, hier ist ein Link zu der jsfiddle https://jsfiddle.net/asher118/wn79h3bw/ –

+0

@Alamin Hossain - Nach meinem eigenen Test mit deiner jsfiddle, bewegt nur die Zeile 'var checkerboard = [];' innerhalb von 'function1' es. – ConnorsFan

+0

@AlaminHossain, wenn ich die Änderungen, die ich vorgeschlagen habe, zu Ihrem jsfiddle mache, funktioniert es richtig. – rdubya

Verwandte Themen