私は何が間違っているのだろうか:
$(".s").keypress(function(e) {
switch (e.keyCode) {
case 8: // Backspace
//console.log('backspace');
case 9: // Tab
case 13: // Enter
case 37: // Left
case 38: // Up
case 39: // Right
case 40: // Down
break;
default:
doSearch();
}
});
ヒットしたときにdoSearch()
関数も起動するようにします Backspace キー。現時点では、押しても何も起こりません Backspace ChromeおよびSafariで。
何か案は?
keyup
ではなくkeypress
を使用します。ユーザーが何かを押すと、これはすべてのキーコードを取得します
私はこれに出くわしました。 .on
を使用したため、少し異なって見えますが、これを行いました:
$('#element').on('keypress', function() {
//code to be executed
}).on('keydown', function(e) {
if (e.keyCode==8)
$('element').trigger('keypress');
});
ここに私の仕事を追加します。ユーザーが入力したssnを削除する必要があったので、jQueryでこれを行いました
$(this).bind("keydown", function (event) {
// Allow: backspace, delete
if (event.keyCode == 46 || event.keyCode == 8)
{
var tempField = $(this).attr('name');
var hiddenID = tempField.substr(tempField.indexOf('_') + 1);
$('#' + hiddenID).val('');
$(this).val('')
return;
} // Allow: tab, escape, and enter
else if (event.keyCode == 9 || event.keyCode == 27 || event.keyCode == 13 ||
// Allow: Ctrl+A
(event.keyCode == 65 && event.ctrlKey === true) ||
// Allow: home, end, left, right
(event.keyCode >= 35 && event.keyCode <= 39)) {
// let it happen, don't do anything
return;
}
else
{
// Ensure that it is a number and stop the keypress
if (event.shiftKey || (event.keyCode < 48 || event.keyCode > 57) && (event.keyCode < 96 || event.keyCode > 105))
{
event.preventDefault();
}
}
});
入力の変更時にのみイベントを発生させたい場合:
$('.s').bind('input', function(){
console.log("search!");
doSearch();
});
.keypress()のjQueryドキュメントによると、非印刷可能文字はキャッチされないため、バックスペースはキープレスでは機能しませんが、キーダウンとキーアップでキャッチされます。
ブラウザがキーボード入力を登録すると、keypressイベントが要素に送信されます。これはkeydownイベントに似ていますが、Shift、Esc、deleteなどの修飾キーと非印刷キーはkeydownイベントをトリガーしますが、keypressイベントはトリガーしません。プラットフォームとブラウザによっては、2つのイベントの他の違いが生じる場合があります。 ( https://api.jquery.com/keypress/ )
場合によっては、キーアップは望ましくないか、他の望ましくない効果があり、キーダウンは十分であるため、これを処理する1つの方法は、keydown
を使用してすべてのキーストロークをキャッチし、キーが入力されるように短い間隔のタイムアウトを設定してから処理を行うことですあとで。
jQuery(el).keydown( function() {
var that = this; setTimeout( function(){
/** Code that processes backspace, etc. **/
}, 100 );
} );