gpt4 book ai didi

jQuery 显示/隐藏焦点问题

转载 作者:行者123 更新时间:2023-12-01 00:18:49 24 4
gpt4 key购买 nike

输入文本字段下方显示一个下拉列表。当前配置为在文本输入字段失去焦点时隐藏此下拉列表。问题是,用户需要能够单击下拉列表本身来显示另一个区域,但这样做时下拉列表本身会在其他区域显示之前隐藏。注释掉Fiddle第 15-17 行查看其他区域的正确显示。

     <!DOCTYPE html>
<html lang="en">
<head>
<title>Dynamic show/hide</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script>
$(function () {

$(".addressFill").hide();
$(".dropdown").hide();

function showElem() {
$(".addressFill").show();
}

$(".addresspicker").click(function () {
$("ul.dropdown").toggle();
});

// Problem starts here
$(".addresspicker").focusout(function () {
$(".dropdown").hide();
});
// ends

$("ul.dropdown").on("click", "li", showElem);
});
</script>
<style>
.dropdown { margin-left: 0.5em; padding: 0.5em; background: #fff; position: absolute; z-index: 999; border-top: 1px solid #B9B9B9; border-left: 1px solid #B9B9B9; border-right: 1px solid #7D7D7D; border-bottom: 1px solid #7D7D7D; }
ul { list-style-type: none; }
.dropdown li { padding: 0.5em; }
.dropdown li:hover { background-color: #eee; }
.dropdown li a:hover { text-decoration: none; }
p.addressFill { float: right; }
</style>
</head>
<body>
<form>
<fieldset>
<div class="section">
<label class="FieldLabel">Address:<span class="required">*</span></label>
<div class="autofill">
<input name="" maxlength="38" size="38" id="" type="text" title="addresspicker" class="addresspicker" />
<ul class="dropdown">
<li><a href="#">Item 1</a></li>
<li><a href="#">Item 2</a></li>
<li><a href="#">Item 3</a></li>
<li><a href="#">Item 4</a></li>
</ul>
</div>
</div>
<p class="addressFill"> Show/hide section </p>
</fieldset>
</form>
</body>
</html>

最佳答案

我确信有更好的方法,但您可以尝试使用 setTimeout()当用户完成操作和/或经过给定时间后,延迟自动关闭菜单,类似于:

// stores the setTimeout result
var timeOut;

// closes the menu
var closeMenu = function () {
$("ul.dropdown").hide();
};

// resets the timeout using the specified delay
var resetTimeout = function(newDelay){
if (timeOut > 0) {
clearTimeout(timeOut);
}

timeOut = setTimeout(function () {
closeMenu()
}, newDelay);
};

$(function () {
// use to store timeout
var timeOut = null;

// ...removed unchanged code for readability

// Problem starts here

// reset timeout when focus is lost on input
$(".addresspicker").focusout(function () {
resetTimeout(1000);
});

// reset the timeout when moving over or leaving the menu
$("ul.dropdown").on('mousemove mouseleave', function () {
resetTimeout(1000);
})
// ends

// ...removed unchanged code for readability
});
<小时/>

DEMO - 使用setTimeout()

<小时/>

这只是使用 setTimeout() 的众多变体之一。您可以非常详细地改善用户体验。
当然,很可能有一种更有效的方法来同时完成这一切。

关于jQuery 显示/隐藏焦点问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15873641/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com