Загрузка контента после добавления элемента в DOM

0

Я использую JQuery load() для изменения содержимого div. Чтобы вызвать этот метод, я добавляю обработчик кликов в элемент HTML, например img, который вызовет этот метод. В mousedown, я добавляю еще один img в DOM сразу после щелкнутого img, который накладывает его точно. Я делаю это, чтобы показать пользователю, что произошел щелчок. На мышке я скрываю это. Я показываю его снова, когда пользователь снова нажимает на этот img, поэтому я не удаляю его из DOM.

Это работает в основном, но это вызывает у меня проблемы при вызове метода загрузки при нажатии. Событие клика не выполняется, если я не удерживаю кнопку мыши нажатой около одной секунды. Когда я не вставляю это оверлейное изображение после нажатого изображения (но, например, перед ним в DOM), onClick отлично работает.

Привязка load() к событию mouseUp происходит с тем же поведением, что и onClick.

Может ли кто-нибудь дать мне подсказку, как решить эту проблему? Обходным путем является привязка load() к событию mousedown. Но этого я не хочу.

element.on('click', function() {
    $('#content').load(target, function(event) {
        [...]
     });
});

element.on('vmousedown', function(event) {
    if (event.which == 1 || event.which == 0) {
        showOnClickImage($(this));
    }
});

element.on('vmouseup mouseleave', function(event) {
    if (event.which == 1 || event.which == 0) { // left mousebutton or touch respectively
        hideOnClickImage($(this));    
    }
});

function showOnClickImage(element) {
    if (element.data("onClickImageOverlay")) {
        element.data("onClickImageOverlay").show();
    } else if (element.data("onclickimage")) {
        [read attributes]
        var overlayImage = $("<img data-onClickImageOverlay src='" + src + "' style='position:absolute; width:" + width + "; height:" + height + "; left:" + left + "; top:" + top + ";' />");
        element.after(overlayImage); // removing this line makes load() work
        element.data("onClickImageOverlay", overlayImage);
    }
    clearTimeout(clickTimeout);
    clickTimeout = setTimeout(function() {hideOnClickImage(element);}, 300);
}


function hideOnClickImage(element) {
    if (element.data("onClickImageOverlay")) {
        element.data("onClickImageOverlay").hide();
    }
}
Теги:

1 ответ

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

Я нашел ответ. При отображении другого изображения на мыши вниз это оверлейное изображение затем захватывает событие mouseup, потому что оно находится в момент времени мыши поверх исходного изображения. Это также хорошо, почему onclick не работает с исходным изображением. Кроме того, при показе оверлейного изображения на мышеловке происходит событие mouseleave. Это имеет смысл, потому что указатель мыши оставляет исходное изображение.

Разумеется, мышление работало, ожидая дольше элемента, чем setTimeout(). setTimeout() спрятал оверлейное изображение через 0,3 секунды.

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

Ещё вопросы

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