2013-07-09 42 views
0

我使用Java的查詢生成頁面加載一個棋盤:函數調用順序

基本上我有一個空的身體:

<body> 
</body> 

然後我有以下的javascript鏈接:

var addsquareblack=function(i,row){$(document).ready(function(){ 

    var square=$('<div class="square"></div>'); 
    if ((i%2)===0) 
     {square.css('background-color','brown');} 
    $('.row').last().append(square); 
});}; 

var addsquarewhite=function(i,row){$(document).ready(function(){ 

    var square=$('<div class="square"></div>'); 
    if ((i%2)===0) 
     {square.css('background-color','white');} 
     else 
     {square.css('background-color','brown');} 
    $('.row').last().append(square); 
});}; 

var create=function(a){$(document).ready(function(){ 
    var row=$('<div class="row"></div>'); 
    $('body').append(row); 
    if ((a%2)===0) 
    {for(var i=1;i<9;i++){addsquareblack(i,row);}} 
    else 
    {for(var i=1;i<9;i++){addsquarewhite(i,row);}} 
});}; 

var addrows=function(){ 
    for(var i=1;i<9;i++){create(i);} 
    }; 

然後我在腳本中調用頭:

<script> addrows() </script> 

然而,addsquarewhiteaddsquare黑不正常:我div s的row類被添加到body正確,但隨後,我加入的平方越來越編成的最後div。我認爲他們只會被添加到方法調用時可用的最後一個div。很明顯,我不明白JavaScript中的範圍/流量。請指教。
謝謝!

+0

第一眼看上去,你是如何使用的document.ready是錯誤的,它應該像http://jsfiddle.net/arunpjohny/ axsvL/1/ –

+0

我強烈建議你在css(或者sizzle)中使用':odd'和':even'僞類,追加64個div並使用style來爲每個'-nth(8n)'元素創建一個新行 – fcalderan

+0

阿倫:是的,它修復了它。在每個單獨的函數中使用document.ready會產生問題。 – kempchee

回答

1

而且你對ready處理程序的用法是錯誤的

這是因爲你要添加的元素square到最後一行,而不是一行。

$('.row').last().append(square) 

代替

var addsquareblack=function(i,row){ 
    var square=$('<div class="square">1</div>'); 
    if ((i%2)===0) { 
     square.css('background-color','brown'); 
    } 
    row.append(square); 
}; 

var addsquarewhite=function(i,row){ 
    var square=$('<div class="square">2</div>'); 
    if ((i%2)===0) { 
     square.css('background-color','white'); 
    } else { 
     square.css('background-color','brown'); 
    } 
    row.append(square); 
}; 

var create=function(a){ 

    var row=$('<div class="row"></div>'); 
    $('body').append(row); 
    if ((a%2)===0) { 
     for(var i=1;i<9;i++){ 
      addsquareblack(i,row); 
     } 
    } else { 
     for(var i=1;i<9;i++){ 
      addsquarewhite(i,row); 
     } 
    } 

}; 

var addrows=function(){ 
    for(var i=1;i<9;i++){ 
     create(i); 
    } 
}; 
$(document).ready(function(){ 
    addrows(); 
}); 

演示:Fiddle

+0

這也適用;我應該刪除我的函數的第二個參數,因爲我已經通過將變量行傳遞給add ...函數來實現它的工作。我正在尋找一種方法來讓它工作,而不必傳遞該變量。但修復我使用document.ready已經完成了!謝謝 – kempchee