Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检查select是否显示选项_Javascript_Jquery_Html - Fatal编程技术网

Javascript 检查select是否显示选项

Javascript 检查select是否显示选项,javascript,jquery,html,Javascript,Jquery,Html,我有以下HTML代码: 测试1 测试2 测试3 如果未显示,您可以使用更改事件,如果显示 $(“#myselect”)。在({ “更改”:函数(){ $(this.blur(); }, “焦点”:函数(){ 控制台日志(“显示”); }, “模糊”:函数(){ 控制台日志(“未显示”); }, “键控”:功能(e){ 如果(e.keyCode==27) 控制台日志(“显示”); } }); 测试1 测试2 测试3 解决方案: select是一个输入,它有一个焦点状态,因此当它聚焦时,将显

我有以下HTML代码:


测试1
测试2
测试3

如果
未显示
,您可以使用
更改
事件,如果
显示

$(“#myselect”)。在({
“更改”:函数(){
$(this.blur();
},
“焦点”:函数(){
控制台日志(“显示”);
},
“模糊”:函数(){
控制台日志(“未显示”);
},
“键控”:功能(e){
如果(e.keyCode==27)
控制台日志(“显示”);
}
});

测试1
测试2
测试3
解决方案:

select
是一个输入,它有一个焦点状态,因此当它聚焦时,将显示列表(选项),当它不聚焦时,选项列表将消失。因此:

$("#myselect").on("click", function() {
    if ($("#mySelect").is(":focus")) {
        console.log("displayed");
    } else {
        console.log("not displayed");
    } 
});

希望能有所帮助。

阅读之后,我意识到选项标记不是“常见”的DOM元素。然后,控制它就不那么容易了(相反,您要检查单击、模糊,并结合我们之前开始尝试的其他方法)

现在我设法让你最终在我们第一个想法的混合中找到了解决方案,然后,我将解释你的其他可能的解决方案以及我所学到的关于选择的所有东西:

  • 如果您不向“选择”添加“大小”属性,则无法在按键打开时检测到按键

  • 如果将大于1的size属性添加到select中,它将检测按键,但会松开其格式,并显示一个列表

  • 如果尝试使用“偏移”和类似方法来检查“选择”是否打开,也不起作用,因为选项对象没有偏移 功能。。。(它们不是通常的DOM对象)

  • 单击/聚焦也不够,因为在“ESC”单击后,焦点仍保留在选择中

然后,在回顾了所有这些内容之后,我认为如果不像以前那样进行大量的单击/模糊控制,就不可能以纯HTML的方式实现它

无论如何,澄清一下,有很多方法可以帮助您模拟选择/选项下拉列表,并控制它是否打开

我希望这个答案能解决你的问题。检查我为您准备的这个功能提琴,以显示jquery下拉方式:

$('jq-dropdown-1')。打开('show',函数(事件,dropdownData){
控制台日志(“显示”);
}).on('hide',函数(事件,下拉数据){
控制台日志(“隐藏”);
});


单击我
您可以尝试收听单击、模糊和按键事件。我只是在每个事件中将
open
变量切换为
true或false

//如果菜单打开,则为真;如果菜单关闭,则为假
//我们从错误开始
var open=false;
//只是一个打印消息的函数
函数isOpen(){
如果(打开)
返回“菜单打开”;
其他的
返回“菜单关闭”;
}
//每次单击时切换“打开”变量
$(“#myselect”)。在(“单击”,函数(){
打开=!打开;
log(isOpen());
});
//在每个模糊上切换“打开”变量
//仅当菜单已处于“打开”状态时触发
$(“#myselect”)。关于(“模糊”,函数(){
如果(打开){
打开=!打开;
log(isOpen());
}
});
//仅当菜单处于“打开”状态时,按ESC键切换“打开”变量
$(文档).keyup(函数(e){
如果(e.keyCode==27){
如果(打开){
打开=!打开;
log(isOpen());
}
}
});

测试1
测试2
测试3

我建议您使用新的jquery selectmenu,它提供selectmenu打开事件

$(“#我的选择”)。选择功能表({
打开:功能(事件、用户界面){
警报(“打开”);
}
});
标签{
显示:块;
}
挑选{
宽度:200px;
}

测试1
测试2
测试3

当jquery为1.6时,简单检查怎么样+

  if ($(".selector").is(":focus")){
      // do stuff
  }


它可以做到这一点。

如果
元素有焦点,则可能会显示它们的副本,但如果没有焦点,它们仍然会存在(除非您使用JS代码添加/删除它们…).@AlejandroTeixeiraMuñoz那里的答案不起作用,因为我可以按Escape键,即使选择没有显示选项,它仍将保持焦点同意w/@AlejandroTeixeiraMuñoz-该链接上的第二个答案是Promissing,请检查第二个答案。如果选择在初始位置聚焦,则可能会导致一些错误。。。正确的?也许这样更好:当我按下
select
来显示选项,然后再次按下它来隐藏选项时,检查帖子的编辑,了解为什么
focus
不起作用。当我点击
select
时,它会记录
open
。我再次单击
选择
,它将关闭,但
打开
将再次记录。所以这不太好用…我正在检查ESC键事件只有在选择关闭时才被触发。。。试图纠正…@chris97ong我不认为你的问题有解决方案,特别是在IES中,你可以专注于选择,通过点击
选项卡
按键选择
选择
,仍然可以隐藏选项。显示所有选项和日志“菜单打开”。再次单击
选择
。这会隐藏所有选项,并且控制台会记录“菜单已关闭”。然后单击
以外的任何位置,选择
。控制台记录“菜单打开”。您的答案只需要一个快速修复,除此之外,它似乎运行良好。如果您使用“单击/模糊”来修复检查“选择”是否打开的问题。但是有一个键,ESC,ENTER,空格。因此,在按下空格键时,您应该将其设置为打开,在esc上设置为关闭,在enter上设置为关闭(实际上是单击
$(".selector").on('focus', function() {
    // do stuff
});