当 #asdf 聚焦并单击其他元素时,事件按 mousedown、blur、mouseup、click 的顺序触发。所以在点击触发之前处理程序已被删除。
mousedown 事件在模糊之前触发。如果您可以使用 mousedown 而不是单击,则可以使用以下方法:
$(document).ready(function () {
$("#asdf").on("focus", function () {
$("body").on("mousedown", wasItClicked);
});
$("#asdf").on("blur", function () {
$("body").off("mousedown", wasItClicked);
});
});
(垃圾桶)
编辑:
您可以使用 mousedown 事件来帮助确定您是否因为单击而失去焦点,如果失去焦点,则删除单击处理程序中的处理程序。
$(document).ready(function () {
$("#asdf").on("focus",function() {
$("body").on("mousedown", setDown);
$("body").on("click", wasItClicked);
});
$("#asdf").on("blur", function() {
if ($(this).attr("mouse") != "down") {
$("body").off("mousedown", setDown);
$("body").off("click", wasItClicked);
}
});
});
function setDown() {
$("#asdf").attr("mouse","down");
}
function wasItClicked() {
if ($("#asdf") != $(document.activeElement)) {
$("body").off("mousedown", setDown);
$("body").off("click", wasItClicked);
}
$("#asdf").attr("mouse","up");
alert("yeah");
}
新垃圾箱