#asdf がフォーカスされ、他の要素がクリックされると、mousedown、blur、mouseup、click の順にイベントが発生します。そのため、クリックが発生する前にハンドラーが削除されました。
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");
}
新しいビン