2013-04-13 45 views
-2

假設我有這樣的代碼:如何在javascript中獲得按鍵序列?

function onKeystroke(e) 
{ 
    if (e.keyCode == 39) //Arrow Right 
    { 
     currentCell += 1; 
    } 

    if (e.keyCode == 37) //Arrow Left 
    { 
     currentCell -= 1; 
    }  

    if (e.keyCode>47 && e.keyCode<58) //Numbers 0-9 
    { 
     cells[currentCell] = e.keyCode - 48; 
    }    
} 

但我不僅要得到一個號碼,但也有兩個數字。該程序的行爲應如下所示: - 如果用戶移動到空單元格並按下「2」鍵,則單元格中會顯示編號「2」。如果他現在按下「3」,則數字變爲「23」。下一個按鍵(讓我們說「7」)開始它並在單元格中放置「7」。 - 如果用戶移動到已經寫入「2」的單元格中,然後按下「3」,則僅顯示「3」,並且隨後的「7」中風使其成爲「37」。

因此,移出一個單元格應該「關閉」它類似於MS Excel中發生的情況。

我知道我可以跟蹤處於打開或關閉狀態的單元格,但這需要將單元格「關閉」附加到所有移動功能。這有點問題,因爲我的實際程序中有兩個以上的問題。這不是不可能的,但我想知道是否有一些更好的方法,以便通過爲if(e.keyCode> e.keyCode < 58)案例編寫正確的腳本來獲得預期的行爲。 。

回答

1

沒有任何神奇的方式來跟蹤應用程序狀態,而無需編寫一些跟蹤它的代碼= P。你將不得不更新你的移動函數來跟蹤單元格是否被聚焦。但是,如果您的單元格可對焦且具有tabindex,則可以使用focus事件來集中此邏輯。如果不使用「焦點」事件,您目前的功能可能如下所示:

var isNewCell = false; 

function onKeystroke(e) 
{ 
    if (e.keyCode == 39) //Arrow Right 
    { 
     currentCell += 1; 
     isNewCell = true; 

    } 

    if (e.keyCode == 37) //Arrow Left 
    { 
     currentCell -= 1; 
     isNewCell = true; 
    }  

    if (e.keyCode>47 && e.keyCode<58) //Numbers 0-9 
    { 
     if (isNewCell || typeof cells[currentCell] !== 'number' || cells[currentCell].toString().length === 2) { 
      cells[currentCell] = e.keyCode - 48; 
     } else { 
      cells[currentCell] = parseInt(cells[currentCell] + (e.keyCode - 48).toString(), 10); 
     } 

     isNewCell = false; 
    }    
} 
+0

是的,謝謝!但我可以避免編輯所有的移動功能嗎? –

+0

你是什麼意思「所有運動功能」?你只需要重用相同的'onKeystroke'函數。 – plalx

+0

我的意思是「子功能」或只是「部分」在「if(e.keyCode ==某些運動)」情況下 –