Попытка предотвратить ввод мертвой клавиши с клавиатуры Ma c - PullRequest
1 голос
/ 16 апреля 2020

Я пытаюсь создать ярлык, используя комбинацию alt + i , которая обычно печатает мертвый ключ ˆ , я попробовал следующее:

$(document).ready(function () {
    $("#txtInput").keydown(
       function (event) {
           if (event.which == 229 && event.altKey === true) {
               alert(event);
               event.preventDefault();
               event.stopPropagation();
           }
       }
   ); 
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<input id="txtInput" type="text" />

Код внутри условия выполняется, но ˆ все еще набирается в моем "#txtInput". Можно ли предотвратить ввод этого текста?

Ответы [ 3 ]

1 голос
/ 16 апреля 2020

Просто сравните с ключом события, и если он равен 'i'. Похоже, самое естественное решение для меня.

$('#txtInput').keydown(function(e){
   if( e.altKey && e.key == 'i'){
     e.preventDefault();
     console.log("Blocked");
  }        
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" id="txtInput">
1 голос
/ 16 апреля 2020

Я бы сравнил ключ с реальным символом, как

$("#txtInput").keydown(
  function (event) {
    if (('Ii'.indexOf(String.fromCharCode(event.which)) >= 0) && event.altKey === true) {
      console.log('Here you go');
      // Do stuff here 
      event.preventDefault();
      event.stopPropagation();
    }
  }
);
0 голосов
/ 16 апреля 2020

Это очень сильно зависит от раскладки клавиатуры c, и, возможно, это не универсальное c решение, но вы можете сделать что-то вроде этого, чтобы сделать ALT + I ярлыком для работы:

function custom() {
  console.log('The short-cut executed');
}
let isDead = false;
document.addEventListener('keydown', e => {
  if (e.altKey && e.code === 'KeyI') {
    custom();
    e.preventDefault();
  };
  if (isDead) {
    e.preventDefault();
  }
  isDead = (e.key === 'Dead');
});
<input>

Сам мертвый ключ не может быть предотвращен, но символ, полученный после мертвого ключа. Поскольку многие свойства события клавиатуры теперь устарели, в коде используется относительно новое свойство кода , которое даст код физической клавиши, которая была нажата.


РЕДАКТИРОВАТЬ

Поскольку MacOS, по-видимому, отказывается предотвращать действие мертвых клавиш по умолчанию, вы можете использовать два события: одно на document для запуска ярлыка, а другое на входах (или на document а также), чтобы стереть каретку (или любые нежелательные символы).

function custom() {
  console.log('The short-cut executed');
}

// KeyDown for triggering the shortcut
document.addEventListener('keydown', e => {
  if (e.altKey && e.code === 'KeyI') {
    custom();
  };
});

// Input for removing the dead key characters
$(document).on('input', 'input', e => {
  e.target.value = e.target.value.replace(/\^/g, '');
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input>

Оба события необходимы, поскольку при срабатывании keydown значение входа еще не обновляется. С другой стороны, объект события input не имеет свойств key/code.

...