2016-06-07 122 views
0

我想模擬在一個弧形網格控制(Telerik)內的文本區域中的左和右箭頭鍵按下。JavaScript或jQuery的觸發左箭頭鍵按下事件(模擬箭頭鍵按下)

我有一個特定於瀏覽器Firefox的選項卡事件(得到這部分固定)和箭頭鍵不會工作的錯誤。其他瀏覽器都能正常工作。

所以作爲一種解決方法,我想模​​擬使用JavaScript或jQuery的箭頭鍵。

以下是我正在使用包含的選項卡事件修復程序。除此之外,我還檢查是否按下了鍵碼37(這是左箭頭鍵)。在這一點上,我想模擬文本區域中的左箭頭按下。

$(document).on('keydown', function (event) { 
    if (event.keyCode == 9) { //tab pressed 
     event.preventDefault(); // stops default action 
    } 
}); 

$('body').keyup(function (e) { 

    var code = e.keyCode || e.which; 

    //Left arrow key press 
    if (code == '37') 
    { 
     moveLeft();// This does not trigger the left arrow event 
    } 

    //Tab button pressed 
    if (code == '9') { 
     //shift was down when tab was pressed focus -1 
     if (e.shiftKey && code == 9) {          
      var focused = $(':focus'); 
      var inputs = $(focused).closest('form').find(':input'); 
      inputs.eq(inputs.index(focused) - 1).focus(); 
     } 
     //tab was pressed focus +1 
     else { 
      var focused = $(':focus'); 
      var inputs = $(focused).closest('form').find(':input'); 
      inputs.eq(inputs.index(focused) + 1).focus();         
      } 
    }  
}); 

在這個問題上的任何幫助將不勝感激

+0

如果你不想自己做這個代碼,你可以使用這個庫(https://craig.is/killing/mice),我認爲它可以幫助你實現你所需要的。 – EpaXapate

回答

2

我通過移動光標回一個空間得到了這個工作,下面是我用來模擬左箭頭按鍵的代碼。

注 - 要模擬正確的密鑰是39,並將myval屬性設置爲-1。

$('body').keydown(function (e) { 

    var code = e.keyCode || e.which; //Find the key pressed 

    if (code == '37') { 

      e.preventDefault(); // stop default action 
      var elementId = e.target.id;// get id of input text area          

      var el = document.getElementById(elementId), 
      myval = 1 // set mouse cursor to move back one space 
      cur_pos = 0; 

      if (el.selectionStart) { 
       cur_pos = el.selectionStart; 
      } 
      else if (document.selection) { 
       el.focus(); 

       var r = document.selection.createRange(); 
       if (r != null) { 
        var re = el.createTextRange(), 
        rc = re.duplicate(); 
        re.moveToBookmark(r.getBookmark()); 
        rc.setEndPoint('EndToStart', re); 

        cur_pos = rc.text.length; 
       } 
      } 

      if (el.setSelectionRange) { 
       el.focus(); 
       el.setSelectionRange(cur_pos - myval, cur_pos - myval); 
      } 
      else if (el.createTextRange) { 
       var range = el.createTextRange(); 
       range.collapse(true); 
       range.moveEnd('character', cur_pos - myval); 
       range.moveStart('character', cur_pos - myval); 
       range.select(); 
      } 
} 
+0

此代碼將插入符從一個位置移到上一個或下一個位置。但是當插入符超出文本框或文本區的可見區域時,滾動到更新後的插入符號位置不會發生。 –

相關問題