остановить размытие событие от срабатывания в результате нажатия клавиши

0

Когда обнаружено событие "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)
}
Теги:

1 ответ

1
Лучший ответ

Эта строка вызывает такое поведение:

$("#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/

  • 0
    Да, я понимаю это, спасибо :). Мой вопрос, как я могу обойти это поведение?
  • 0
    @Maximus обновил ответ этим.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню