J'essaye de créer une matrice pour la musique de 12 tons. Les nombres compris entre 0 et 11 indiquent les intervalles entre les hauteurs.Mauvais résultats dans la table JavaScript
Mon script affiche correctement la matrice car elle s'exécute initialement avec la page; mais quand on fait un autre calcul avec le bouton, ça devient en désordre, même avec le même ensemble de hauteur.
Voici mon script:
var exist = 0;
function execute (form) {
therow = form.inputbox.value.split(",");
matrix();
}
function shufflerow (form) {
shuffle = function(v){
for (var y, x, z = v.length; z; y = parseInt(Math.random() * z), x = v[--z], v[z] = v[y], v[y] = x);
return v;
}
var randomrow = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
shuffle(randomrow);
var newLength = randomrow.unshift(0);
form.inputbox.value = randomrow;
}
function matrix() {
if (exist > 0) {
var box = document.getElementById('matrixarea');
var table = document.getElementById('matrixbox');
box.removeChild(table);
}
if (typeof(therow) == 'undefined') {
therow = new Array (0,3,2,1,9,5,7,6,8,4,11,10);
}
var body = document.getElementsByTagName("body")[0];
var tbl = document.createElement("table");
var tblBody = document.createElement("tbody");
var row = document.createElement("tr");
for(h=0 ; h < 12 ; ++h) {
var cell = document.createElement("td");
var cellText = document.createTextNode(therow[h]);
cell.appendChild(cellText);
row.appendChild(cell);
}
rows = new Array(11);
for (i=1 ; i < 12 ; ++i) {
tblBody.appendChild(row);
var row = document.createElement("tr");
col = new Array(11);
col[i] = 12 - therow[i];
var cell = document.createElement("td");
var cellText = document.createTextNode(col[i]);
cell.appendChild(cellText);
row.appendChild(cell);
tblBody.appendChild(row);
rows[i] = new Array(11);
for (j=1 ; j < 12 ; ++j) {
rows[i][j] = (col[i] + therow[j]) % 12;
var cell = document.createElement("td");
var cellText = document.createTextNode(rows[i][j]);
cell.appendChild(cellText);
row.appendChild(cell);
}
}
tblBody.appendChild(row);
tbl.appendChild(tblBody);
body.appendChild(tbl);
tbl.setAttribute('id','matrixbox');
tbl.setAttribute("cellpadding", "5");
tbl.setAttribute("cellspacing", "0");
document.getElementById('matrixarea').appendChild(tbl);
exist++;
}
Voici la forme:
<div id="matrixarea">
<form name="primerow" action="" method="get">
<input type="text" name="inputbox" value="">
<input type="button" name="button2" value="Shuffle" onClick="shufflerow(this.form)">
<input type="button" name="button1" value="Make" onClick="execute(this.form)">
</form>
</div>
Vous pouvez le voir en action @http://abbasmacioglu.home.anadolu.edu.tr/m.html.
Dans une matrice correcte, le premier nombre doit être vu en diagonale sur la table, de la cellule en haut à gauche en bas à droite.
Je serais reconnaissant pour toute aide ou commentaires.
C'est, je vous remercie beaucoup. Btw, je ne pouvais pas exécuter votre fonction de matrice, il n'y a pas de table du tout, est-ce que quelque chose me manque? Merci pour les autres conseils aussi, j'apprécie vraiment votre aide. – buba
Fonctionne pour moi, il vous suffit de vous assurer de l'appeler dans votre onload comme ci-dessus. – bobince
http: // debuggable.com/posts/7 + 8 === 7-in-javascript: 4acba016-d204-489b-b5a0-1fd0cbdd56cb – powtac