(私はあなたの代わりにCSSのここ:hover
ルールをJavaScriptを使用するには十分な理由があるとします。)
setTimeout
動作します - あなたがしていますおそらくthis
のコンテキストを失ってしまいます。あなたはES6の書式を使用することができる場合は、脂肪の矢印機能を既存のthis
を保存することができます。
var timeoutID = false; // We'll use this to cancel any existing timeouts before setting a new one
$('#tools .has-tooltip').on('mouseover', function() {
if (timeoutID) {
window.clearTimeout(timeoutID);
}
$('#tools .has-tooltip').removeClass('hover')
$(this).addClass('hover');
}).on('mouseout', function(e) {
if ((!$(e.target).is('input')) && (!$('input').is(":focus"))) {
timeoutID = window.setTimeout(() => {
$(this).removeClass('hover');
}, 1000);
}
});
.hover {
background-color: #FFC
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="tools">
<div class="has-tooltip">Hover me</div>
</div>
また
、setTimeout関数で使用することができ、一時変数に格納this
:
...
var self = this;
window.setTimeout(function() {
$(self).removeClass('hover');
},1000);
...
ありがとうございますが、なぜか分かりませんが、mouseoutが行われていなくても、このスクリプトは「ホバー」クラスを削除します。基本的には、マウスを#tools .has-tooltipと私はどこにも移動しない場合でも、 "ホバー"は削除されます: -/ – Edoras
問題は "mouseout"にありました、私は子供の要素のためにそれを使用しているので、それは非常によく働くmouseleaveで、ありがとう:) – Edoras