2017-01-20 106 views
0

這裏是我的代碼:如何按jQuery鍵盤按鈕之一?

$("input").on({ 
 
    keydown: function(ev) { 
 
     if (ev.which === 27){ // esc button 
 
      backspace_emolator(); 
 
     } else if (ev.which === 8){ // backspace button 
 
      console.log('backspace button pressed'); 
 
     } 
 
    } 
 
}); 
 

 
function backspace_emolator(){ 
 
    // remove one character exactly how backspace button does 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="text" name="fname" class="myinput">

所有我想要做的是使ESC按鈕完全一樣退格按鈕。所以我想在按下<kbd>esc</kbd>時刪除.myinput的一個字符。

我該怎麼做?


注:我不想只是刪除.myinput的價值的一個字符。我想按退格鍵按鈕。因此,當我按esc按鈕時,應在控制檯中顯示backspace button pressed

+1

的[是否有可能以編程方式模擬按鍵事件?]可能的複製(http://stackoverflow.com/questions/596481/is-it-possible-to-simulate- key-press-events-programatically) –

回答

1

這是我會做的。我不認爲這是最好的解決方案,而是一個工作的解決方案。

$("input").on({ 
 
    keydown: function(ev) { 
 
     if (ev.which === 27){ // esc button 
 
      backspace_emolator(this); 
 
     } else if (ev.which === 8){ // backspace button 
 
      console.log('backspace button pressed'); 
 
     } 
 
    } 
 
}); 
 

 
function backspace_emolator(el){ 
 
    // remove one character exactly how backspace button does 
 
    var val = el.value 
 
    el.value = val.substring(0, val.length - 1); 
 
    // trigger event 
 
    var e = jQuery.Event("keydown"); 
 
    e.which = 8; // # Backspace keyCode 
 
    $(el).trigger(e); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="text" name="fname" class="myinput">

編輯: 我已經修改我的代碼,對於您的編輯。 @ Alexandru-Ionut Mihai建議不適合你的原因是因爲你只是在聽keydown,而在他的例子中他正在觸發按鍵。

+0

這是正確的有點upvote,但我編輯了我的問題,請看看它。 –

+0

我編輯了我的答案並進行了測試,現在esc和backspace都觸發了console.log,並且都清除了一個字符。 –

+0

你的小提琴完全按照預期工作,但我不知道爲什麼它不能用於我的真實代碼':-(' –

1

這裏是解決方案:

你必須trigger事件爲您input

$("input").on({ 
    keydown: function(ev) { 
     if (ev.which === 27){ // esc button 
      backspace_emolator(); 
     } 
    } 
}); 

function backspace_emolator(){ 
    var e = jQuery.Event("keydown", { keyCode: 8 }); // you can specify your desired key code 
    $('input').trigger(e); 
} 
+0

這是正確的有點*(基於我的最後一個版本的問題)*。upvote。但我已經編輯了我的問題,請看看它 –

+0

@MartinAJ,請現在看看 –

+0

沒有任何反應,你知道爲什麼嗎? –

1

使用此代碼,它的工作原理與您希望的一樣。

$("input").on({ 
 
    keydown: function(ev) { 
 
     if (ev.which === 27){ // esc button 
 
      backspace_emolator(ev); 
 
     } 
 
     if (ev.which === 8){ // backspace button 
 
      console.log('backspace button pressed'); 
 
     } 
 
    } 
 
}); 
 

 
function backspace_emolator(ev){ 
 
    // remove one character exactly how backspace button does 
 
     var inputString = $('#inputID').val(); 
 
     var shortenedString = inputString.substr(0,(inputString.length -1)); 
 
    $('#inputID').val(shortenedString); 
 
     console.log("Backspace button Pressed"+" "+inputString); 
 

 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input id="inputID" type="text" name="fname" class="myinput">

+0

當按下「ESC」按鈕時,應該打印「退格鍵按下」!不是'ESC按下'。 –

+0

這很簡單,我會改變它。 –

+0

你現在可以檢查輸出。 –