2012-05-08 6 views
1

Я работаю над интерактивным веб-приложением, которое в настоящее время настроено на http://picselbocs.com/projects/goalcandy (пользователь: [email protected], password: demo). Он позволяет перетаскивать элементы, содержащие изображения и/или текст с левой боковой панели, в рабочее пространство справа и, кроме всего прочего, изменять их размер и редактировать.Обработчик события Blur заблокирован методом jquery preventDefault()

Для редактирования текста на созданных объектах просто щелкните текстовое поле, название или комментарий. Этот элемент <span> заменяется на <textarea>, через который вы можете редактировать содержимое. Когда происходит событие «размытия», текстовое поле исчезает, и его значение добавляется к элементу <span>. Проблема заключается в том, что нажатие на изображение объекта (если оно имеет как изображение, так и текстовые поля) предотвращает запуск «размытия».

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

$(document).on('mousedown dragstart', 'img', function(event) { event.preventDefault(); }); 

Как я могу обойти эту проблему и разрешить обработчик события ONBLUR работать даже при нажатии на изображение, но в то же время поддерживать предотвращение поведения по умолчанию?

PS: вызов alert('blur') позволяет мне отслеживать, когда происходит пожар.

+0

Я нажал на изображение и «размытие» уволили, какой браузер вы используете? –

+0

@Denis Ermolin Извините, я забыл сохранить сценарий с тем, который был отключен без комментариев. Пожалуйста, попробуйте еще раз. –

ответ

1

Вы можете использовать некоторые переменные говорят

var locks = {}; 
locks.textarea_lock = false; 

Затем, нажав на текстовое поле устанавливается locks.textarea_lock = true; В обработчике изображений проверить этот замок:

$(document).on('mousedown dragstart', 'img', function(event) { 
    if (locks.textarea_lock) { 
     return; 
    } 
    event.preventDefault(); 
}); 

В "смазанности" обработчик разблокировать переменную locks.textarea_lock = false;.

+0

Не повезло, поведение не изменилось. –

+0

Я отредактировал ответ –

+0

Thanks Denis. Я немного изменил эту идею, и это было именно то, что мне было нужно. С наилучшими пожеланиями! –

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