Когда обнаружено событие "keydown", событие "размытие" также автоматически запускается. Как предотвратить событие "размытие" в элементе, если срабатывает событие "keydown"? Вот jsFiddle и код: HTML:
<div id="delegatee">
<span id="ctrl" contenteditable="true"></span>
</div>
CSS:
#ctrl {
width:100px;
height:50x;
border:1px solid black;
display:inline-block;
}
JavaScript:
function saveOrDelete() {
$("#ctrl").attr('contentEditable', false);
alert('Triggered'); // alerts 2 times
}
$("#delegatee").on('keydown blur', '#ctrl', saveOrDelete)
Обратите внимание, что это решение не работает:
function saveOrDelete() {
$("#delegatee").off('keydown blur', '#ctrl', saveOrDelete)
$("#ctrl").attr('contentEditable', false);
alert('Trigger');
$("#delegatee").on('keydown blur', '#ctrl', saveOrDelete)
}
Эта строка вызывает такое поведение:
$("#ctrl").attr('contentEditable', false);
Как только диапазон больше не будет contentEditable
он потеряет фокус и, следовательно, будет blur
.
Вам придется переосмыслить свою логику.
Изменить (после вашего комментария):
Чтобы уловить blur
которое сразу следует за keydown
из-за вышеуказанной причины, вы можете изменить свою логику, чтобы сначала проверить, доступен ли диапазон, и затем принять меры на основе этого.
например
var mode = $("#ctrl").prop('contentEditable');
if (mode == 'true') {
$("#ctrl").prop('contentEditable', false);
// your other processes here
} else {
return false;
}
Проверьте обновление на своей скрипке: http://jsfiddle.net/CxFaq/1/