在输入焦点上打开引导下拉菜单

Posted

技术标签:

【中文标题】在输入焦点上打开引导下拉菜单【英文标题】:Open bootstrap dropdown on input focus 【发布时间】:2018-12-17 02:36:21 【问题描述】:

我有一个输入,当单击它时会显示一个引导程序 4 下拉列表,但我需要它在用户点击它时打开它以及 ADA 可访问性。

如果我使用一个使用 $('#input-name).dropdown('toggle') 的焦点事件,它可以正常工作,但是当单击输入时,焦点首先会触发,这会打开下拉列表,然后单击事件会关闭它.

我已经尝试过 e.preventDefault(); e.stopPropagation();但都无助于解决这个问题。

events: 
  focus #healthPlanMenu": "openDropDown"



openDropDown: function (e) 

  if ($('#healthPlanMenu').find('.dropdown-menu:no(.show)'))
    $("#healthPlanMenu.dropdown-toggle").dropdown('toggle');
   //fails

    $("#healthPlanMenu.dropdown-toggle").dropdown('toggle');//fails
    $( "#healthPlanMenu" ).click();//fails

  

【问题讨论】:

“当用户使用标签时我需要打开它”似乎是一种反模式,因为标签只是应该选择一个下拉列表,而不是打开它。您需要按 Enter 键才能打开它。巨大的下拉菜单打开,同时切换到表单上的其他元素会很烦人。如果熟悉标准下拉选项卡并按下回车的盲人会发生什么? (如果已经打开,正常的下拉菜单将关闭)。 我理解您的意思,但在这种情况下,这是盲人用户的理想场景,也是此解决方案的用途。这是一个复杂的下拉菜单,但不是一个庞大的下拉菜单,必须选择计划和产品来帮助用户获得正确的结果。只选择一个计划将导致一个错误状态,该状态会为用户正确宣布和关注。 【参考方案1】:

因此,理想情况下,您可能会通过让focus 事件将下拉菜单的状态设置为打开来解决这个问题,这样如果点击事件“重新打开”它,没问题。但是,据我所知,jQuery API 只有一个 toggle 选项;似乎没有必要的限制......

鉴于此,我们可以通过使用mousedown 知道在我们的焦点事件之后是否有点击。所以解决这个问题的一个有点老套的方法是,如果我们知道点击即将到来,就禁用我们的焦点事件。

(function() 
	var disable = false;
	$('#healthPlanMenu.dropdown-toggle')
		.on('mousedown touchstart', function() 
			disable = true;
		)
		.on('focus', function() 
			if (!disable) 
				$(this).dropdown('toggle');
			
		)
		.on('mouseup touchend',function() 
			disable = false;
		)
)()

我不知道touchstarttouchend 是否是必要的,因为大多数浏览器也可能在触摸时触发鼠标事件。但安全总比后悔好。

【讨论】:

以上是关于在输入焦点上打开引导下拉菜单的主要内容,如果未能解决你的问题,请参考以下文章

Bootstrap 3下拉菜单在子菜单焦点上更改背景

从外部按钮打开引导下拉菜单

单击下拉菜单按钮时引导打开链接

按下选项卡时如何在焦点上打开 select2 下拉菜单

Bootstrap 下拉菜单 - 如果搜索栏被聚焦,则保持打开状态

角度引导下拉菜单在左侧打开