2012-10-15 46 views
0

我有一個數組(拼接到大小2),跟蹤用戶點擊(第一,最後)。第一個和最後一個元素是唯一的不正確的數組值

我想加載基於用戶點擊的內容。奇怪的是,我沒有看到更新的數組,除非我做了2個console.logs。如果1個日誌完成,數組不會更新。我猜這與數組執行/操作時間有關。

我調試的方式是點擊處理程序來記錄並單擊以查看數組值。任何建議或提示?

我以前從未遇到過這個問題。謝謝。

var clicksInfo = []; 

    $('#a, #b, #c').on('click', function(e){ 

    // array: add, splice 
    if(jQuery.inArray($(this).attr('id'), clicksInfo) == -1){ 
     clicksInfo.push($(this).attr('id')); 
     if(clicksInfo.length == 2){ 
      // might do something 
     }else if(clicksInfo.length == 3){ 
      clicksInfo.splice(0,1); 
     } 
     }else{ 
     clicksInfo.splice(0,1); 
     clicksInfo.push($(this).attr('id'));  
     } 

     if($(this).attr('id') == 'a'){ 
     // do stuff. 
     }else if($(this).attr('id') == 'b'){ 
     // do stuff. 
     }else if($(this).attr('id') == 'c'){ 
     // do stuff. 
     } 
    }); 


    $(document).on('click', function(){ 
     console.log('clicksInfo', clicksInfo); 
     // console.log('clicksInfo', clicksInfo); 
    }); 
+2

我們可以有一個jsfiddle嗎?它有助於看到HTML :) – Aktee

+0

HTML部分並不重要。這只是3個可點擊的div。這是jsfiddle鏈接。僅供參考,警報正常工作:http://jsfiddle.net/BH8Hm/ – ialphan

回答

2

字符串是字符串,數組是數組,即使在的console.log,這樣做時:

console.log('clicksInfo', clicksInfo); 

那是一個字符串,一個逗號,然後數組?

嘗試做:

console.log('clicksInfo : '+ clicksInfo); 

顯示字符串表示,或顯示該陣列爲對象,不與其他陌生感混合:

console.log(clicksInfo); 
+0

這是我第一次看到這個,哇。如果您更改console.log('clicksInfo',clicksInfo),確切的腳本會工作。到console.log(clicksInfo);這就像Chrome認爲它是同樣的事情,如果第一個參數是相同的,第二個是一個數組。 – Aktee

+0

是的,這是有效的。以前從未遇到有關記錄數組的問題。謝謝! – ialphan

+0

你不能只在一個console.log文件中混合一個數組的字符串,並期望控制檯找出它,大多數情況下,你應該單獨將對象傳遞給控制檯,並且不要將它們與字符串混合,只要另一個控制檯用字符串單獨登錄等。 – adeneo

0

你所面對的問題發生的事件不能保證以特定的順序執行。可以首先執行單擊處理程序,但在大多數瀏覽器中,您的#a,#b,#c處理程序將首先執行。

儘管您可以嘗試使用setTimeout等待足夠長的時間來同步數據,但您的代碼很可能會中斷。

如果你想在兩種情況下處理點擊,我的建議是刪除#a,#b和#c的處理程序。僅使用文檔點擊處理程序,傳遞事件聲明,然後檢查處理程序中單擊元素的ID以調用第一個代碼。然後保證在第二塊代碼運行之前更新數據。類似這樣的:

var clicksInfo = []; 

$(document).on('click', function(e){ 

    if (e.target.id === "a" || e.target.id === "b" || e.target.id === "c") { 
     // array: add, splice 
     if (jQuery.inArray(e.target.id, clicksInfo) == -1){ 
      clicksInfo.push(e.target.id); 
      if(clicksInfo.length == 2){ 
       // might do something 
      } else if(clicksInfo.length == 3){ 
       clicksInfo.splice(0,1); 
      } 
     } else { 
      clicksInfo.splice(0,1); 
      clicksInfo.push(e.target.id); 
     } 

     if(e.target.id === 'a'){ 
     // do stuff. 
     }else if(e.target.id === 'b'){ 
     // do stuff. 
     }else if(e.target.id === 'c'){ 
     // do stuff. 
     } 
    } 

    console.log('clicksInfo', clicksInfo); 
}); 

JSFiddle here