我正在使用 JQuery 的 load() 来更改 div 的内容。为了调用这个方法,我将一个点击处理程序添加到一个 HTML 元素,例如一个 img,它将调用这个方法。在 mousedown 上,我在单击的 img 之后立即将另一个 img 添加到 DOM,该 img 恰好覆盖了它。我这样做是为了向用户显示发生了点击。在 mouseup 上我隐藏它。当用户再次单击该 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();
}
}