2014-09-15 2 views
0

Я пытаюсь улучшить текстовое поле HTML с некоторыми элементами управления BB-Code, которые должны быть доступны только в том случае, если в textarea есть фокус. Желаемое поведение выглядит следующим образом:jQuery и событие bubbling: остановить нежелательные события

Изображение 1 - перед тем событие фокуса: before focus event http://gaedekenet.de/tmp/beforeInit.jpg

Изображение 2 - после того, как событие фокуса (правильное поведение): correct behaviour http://gaedekenet.de/tmp/afterInit.jpg

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

Изображение 3 - после того, как событие фокуса (неправильное поведение): erroneous behaviour http://gaedekenet.de/tmp/afterInit_error.jpg

Мне кажется, что не только Событие «фокус» запускается, но также «нажмите», «mousedown», «mouseup» и т. д.

Что мне нужно сделать сейчас, это остановить распространение события в моем собственном коде (часть фокусировки), чтобы никакие события не могут попасть в плагин BB Code (который является сторонним плагином). Мой текущий подход выглядит следующим образом:

$(#myText) 
    .focus(function(e){ 
     e.stopPropagation().stopImmediatePropagation(); 
     // initialize and show the bb code buttons here 
    }) 
    .click(function(e){ 
     e.stopPropagation().stopImmediatePropagation(); 
    }) 
    .mouseup(function(e){ 
     e.stopPropagation().stopImmediatePropagation(); 
    }) 
    .mousedown(function(e){ 
     e.stopPropagation().stopImmediatePropagation(); 
    }); 

Что мне не хватает?

+0

вы ли попробовать e.preventDefault()? –

ответ

1

e.stopPropagation() останавливает распространение, чтобы предотвратить события по умолчанию использовать

e.preventDefault() 

Полное JQuery событий API документация here

+0

Thanx, e.preventDefault() оказался ядром моего решения. Но для достижения совершенства (правильная обработка событий фокуса и щелчка в огромном массиве над текстовыми областями) мне также пришлось создать довольно сложный набор прослушивателей событий, которые зависят друг от друга. Решение, которое я придумал, заняло у меня 6 часов и разрушило мой день. Но это сделано :-) – Eddie

Смежные вопросы