1秒後にマウスアウト(.hover()の2番目の関数)するとサブナビゲーションを非表示にしようとし、そのためにsetTimeoutを使用します。setTimeout の内部関数で this 変数が必要なので、次のようにしてみます。
jQuery(".topnav > ul > li").hover(function() {
jQuery("ul.topnavsub").hide();
jQuery(this).find("ul.topnavsub").show();
}, function() {
var t = setTimeout((function(that){jQuery(that).find("ul.topnavsub").hide(); console.log(that);})(this), 1000);
});
これは機能しますが、遅延はありません。1. 1000 ミリ秒の遅延がないのはなぜですか? 2. 正しく動作させるにはどうすればよいですか?
これが機能する場合は、追加したい: その 1000 ミリ秒でサブナビに入ると、setTimeout が停止するため、ナビが非表示になりません。それは私が持っているものですが、穴setTimeout-thingが機能しないため、テストできませんでした:
jQuery(".topnav > nav > ul > li").hover(function() {
jQuery("ul.topnavsub").off();
jQuery("ul.topnavsub").hide();
jQuery(this).find("ul.topnavsub").show();
}, function() {
var t = setTimeout((function(that){jQuery(that).find("ul.topnavsub").hide(); console.log(that);})(this), 1000);
jQuery(this).find("ul.topnavsub").on("mouseenter", function() {
clearTimeout(t);
jQuery(this).off();
});
});