2012-07-31 69 views
0

我基本上想要这个循环在我正在开发的网格中产生随机空间,但无法让它在我的脚本中工作。让循环工作在我的脚本

我有正确的循环我不能让它

我刚才编辑我的脚本的其余部分工作,它仍然无法正常工作,任何其他的想法?

var listOfWords = {}; 

var ul = document.getElementById("wordlist"); 

var i; 
for(i = 0; i < ul.children.length; ++i){ 
    listOfWords[ul.children[i].getAttribute("data-word")] = { 
     "pic" : ul.children[i].getAttribute("data-pic"), 
     "audio" : ul.children[i].getAttribute("data-audio") 
    }; 
} 

console.log(listOfWords); 

var chosenWords = new Array(); 

     for(var x = 0; x < 6; x++) 
    { 
     var rand = Math.floor(Math.random() * (listOfWords.length+1)); 
     chosenWords.push(listOfWords[rand]); 
     if (chosenWords.length < 12){ 
        chosenWords.push(' '); 
      } 

    } 

var shuffledWords = Object.keys(listOfWords).slice(0).sort(function() { 
    return 0.5 - Math.random(); 
}).slice(0, 6); 
var guesses = {}; 
console.log(shuffledWords); 
var tbl = document.createElement('table'); 
tbl.className = 'tablestyle'; 
var wordsPerRow = 2; 

for (var i = 0; i < Object.keys(shuffledWords).length - 1; i += wordsPerRow) { 
    var row = document.createElement('tr'); 

    for (var j = i; j < i + wordsPerRow; ++j) { 
     var word = shuffledWords[j]; 
     guesses[word] = []; 

     for (var k = 0; k < word.length; ++k) { 
      var cell = document.createElement('td'); 


      $(cell).addClass('drop').attr('data-word', word); 
      cell.textContent = word[k]; 

      row.appendChild(cell); 
      } 
    } 
    tbl.appendChild(row); 
} 

document.body.appendChild(tbl); 

感谢

+0

是否有任何错误或警告? – LmC 2012-07-31 09:43:21

+0

Firebug找不到任何错误@Liam McCann – sMilbz 2012-07-31 09:45:33

回答

0

希望这有助于你:

var listOfWords = []; 

var ul = document.getElementById("wordlist"); 

var i; 
for(i = 0; i < ul.children.length; ++i){ 

    listOfWords.push({ 
     "name" : ul.children[i].getAttribute("data-word"), 
     "pic" : ul.children[i].getAttribute("data-pic"), 
     "audio" : ul.children[i].getAttribute("data-audio") 
    }); 

    console.log(listOfWords); 
} 

console.log(listOfWords); 

var chosenWords = []; 
var cpy_list = listOfWords.slice(); 

     for(var x = 0; x < 6; x++) 
    { 
     var rand = Math.floor(Math.random() * (cpy_list.length)); 
     console.log('push ' + cpy_list[rand].name); 
     chosenWords.push(cpy_list[rand].name); 
     cpy_list.splice(rand,1); 
     console.log(cpy_list); 
     if (chosenWords.length < 12){ 
      console.log('make a blanck'); 
        chosenWords.push(' '); 
      } 

    } 

console.log(chosenWords); 
var shuffledWords = []; 
shuffledWords = chosenWords.sort(function() { return 0.5 - Math.random() }); 

var guesses = {}; 
console.log(shuffledWords); 
var tbl = document.createElement('table'); 
tbl.className = 'tablestyle'; 
var wordsPerRow = 2; 

for (var i = 0; i < shuffledWords.length - 1; i += wordsPerRow) { 

    var row = document.createElement('tr'); 
    console.log(shuffledWords); 
    for (var j = i; j < i + wordsPerRow; ++j) { 
     var word = shuffledWords[j]; 
     console.log(j); 
     console.log(word); 
     guesses[word] = []; 

     for (var k = 0; k < word.length; ++k) { 
      var cell = document.createElement('td'); 


      $(cell).addClass('drop').attr('data-word', word); 
      cell.textContent = word[k]; 

      row.appendChild(cell); 
     } 
    } 
    tbl.appendChild(row); 
} 

document.body.appendChild(tbl); 

$('#pickNext').click(function() { 
    // remove the class from all td's 
    $('td').removeClass('spellword'); 
    // pick a random word 
    rndWord = Math.floor(Math.random() * (listOfWords.length)); 
    // apply class to all cells containing a letter from that word 
    $('td[data-word="' + listOfWords[rndWord].name + '"]').addClass('spellword'); 
}); 



$('.drag').draggable({ 

    helper: 'clone', 
    snap: '.drop', 
    grid: [60, 60], 
    revert: 'invalid', 
    snapMode: 'corner' 
}); 


$('.drop').droppable ({ 
    drop: function(event, ui) { 
     word = $(this).data('word'); 

     guesses[word].push($(ui.draggable).attr('data-letter')); 
     console.log($(event)); 
     console.log($(ui.draggable).text()); 

     console.log('CHECKING : ' + $(this).text() + ' against ' + $(ui.draggable).text().trim()); 


     if ($(this).text() == $(ui.draggable).text().trim()) { 

      $(this).addClass('wordglow3'); 
     } else { 
      $(this).addClass('wordglow'); 
     } 
     console.log('CHECKING : ' + $(this).text() + ' against ' + $(ui.draggable).text().trim()); 


     console.log(guesses); 

     if (guesses[word].length == 3) { 
      if (guesses[word].join('') == word) { 
       $('td[data-word=' + word + ']').addClass('wordglow2'); 

      } else { 
       $('td[data-word=' + word + ']').addClass("wordglow4"); 
       guesses[word].splice(0, guesses[word].length); 
      } 
     } 






    }, 


    activate: function(event, ui) { 
     word = $(this).data('word'); 

     // try to remove the class 
     $('td[data-word=' + word + ']').removeClass('wordglow').removeClass('wordglow4').removeClass('wordglow3'); 
    } 


}); 

$(".minibutton").hover(function(){ 
     $(this).css("text-decoration", "underline"); 
    },function(){ 
     $(this).css("text-decoration", "none"); 
    } 
); 


$(".minibutton2").hover(function(){ 
     $(this).css("text-decoration", "underline"); 
    },function(){ 
     $(this).css("text-decoration", "none"); 
    } 
); 


var audio = $("#mysoundclip")[0]; 
$("button").click(function() { 
    var noExist = $('td[data-word=' + listOfWords[rndWord].name + ']').hasClass('wordglow2'); 
    if (noExist) { 
     $('#pickNext').click(); 
    } else { 

     $("#mysoundclip").attr('src', listOfWords[rndWord].audio); 
     audio.play(); 
    } 
}); 

var audio = $("#mysoundclip")[0]; 
$("button2").click(function() { 
    var noExist = $('td[data-word=' + listOfWords[rndWord].name + ']').hasClass('wordglow2'); 
    if (noExist) { 
     $('#pickNext').click(); 
    } else { 

     $("#mysoundclip").attr('src', listOfWords[rndWord].audio); 
     audio.play(); 
    } 
}); 

var pic = $("#mypic")[0]; 
$("button").click(function() { 
    var noExist = $('td[data-word=' + listOfWords[rndWord].name + ']').hasClass('wordglow2'); 
    if (noExist) { 
     $('#pickNext').click(); 
    } else { 

     pic = $("#mypic").attr('src', listOfWords[rndWord].pic); 
     pic.show(); 
    } 
}); 


function keys(obj) { 
    var keys = []; 
    for (var key in obj) { 
     if (obj.hasOwnProperty(key)) { 
      keys.push(key); 
     } 
    } 
    return keys; 
} 

+0

你可以[测试这个](http://jsfiddle.net/qBzPx/) – 2012-07-31 12:37:52

+0

非常感谢,但它的东西不对,它不显示图像并在按下“下一个”按钮时发出声音,一些空白不填充背景色和单词在网格中重复。 @ cedric.salaun – sMilbz 2012-07-31 12:43:16

+0

我已更新我的代码。更正: - 一些空白不填充背景颜色和单词在网格中重复。 [在jsfiddle上测试](http://jsfiddle.net/qBzPx/1/) – 2012-07-31 13:10:24

0

首先,你应该改变:

If(chosenWords.length < 12){ 

到:

if (chosenWords.length < 12) { 

和:

chosenWords.push(“ ”); 

至:

chosenWords.push(' '); 

并定义变量selectedWords。

+0

还是不行,查看编辑@ cedric.salaun – sMilbz 2012-07-31 10:48:57

+0

你忘了';'就行'var guesses = {}',你仍然有'如果'而不是'如果' – 2012-07-31 10:53:52

+0

仍然没有工作。看... http://jsfiddle.net/smilburn/bEYJH/28/它应该做一个6x6网格 - 半空的空间和一半的单词与相关的声音和图像。 @ cedric.salaun – sMilbz 2012-07-31 11:17:23