У меня есть элемент contenteditable
p
.Я хотел бы ограничить возможные операции редактирования вставкой и удалением запятых.Я также хочу скопировать обновленное содержимое в другой div
.Кажется, что эти две цели трудно совместить:
Кажется, мне нужно прослушать keydown
события, чтобы предотвратить изменение текста с помощью event.preventDefault()
, если есть какая-либо другая клавиша, кроме backspace илизапятая была нажата.Когда я слушаю keyup
, event.preventDefault()
выполняется слишком поздно, и содержимое обновляется независимо от того, какая клавиша была нажата.
Но мне может потребоваться дождаться обновления keyup
содержание абзацев, чтобы я мог скопировать текст.Если я использую keydown
, я получаю исходный текст.
Я использую Vue.В HTML-коде @keydown='evaluate($event)'
просто присоединяет слушателя и разрешает доступ к переменной события, используя.
Редактировать: это мой оригинальный код, см. Также фрагмент (без Vue) ниже.
HTML
<p @keydown='evaluate($event)' id='text' contenteditable>
Some text
</p>
JS
evaluate: function(storeResponse = true, event) {
// Stop if any key except comma or backspace was pressed. Only works well with keydown.
if (! [',', 'Backspace'].includes (event.key)) {
event.preventDefault();
return;
}
// Otherwise, copy the updated content. Only works well with keyup.
let textContent = document.getElementById('text').textContent;
// Paste updated content to another p
document.getElementById('original-text').innerText = textContent;
}
document.getElementById('text').addEventListener('keydown', evaluate);
function evaluate() {
// Stop if any key except comma or backspace was pressed.
// Only works well with keydown.
if (![',', 'Backspace'].includes(event.key)) {
event.preventDefault();
return;
}
// Otherwise, copy the updated content. Only works well with keyup.
let textContent = document.getElementById('text').textContent;
// I need to paste the updated content to another div, but just log it for this snippet
console.log(textContent);
}
<p @keydown='evaluate' id='text' contenteditable>
Some text
</p>
Существует ли элегантный способ ограничения возможных операций редактирования и для получения обновленного текста?