Так что в идеале вы, вероятно, решили бы это, если бы событие focus
установило состояние раскрывающегося списка таким образом, если оно «открывается» по событию click, не проблема.Однако, насколько я могу судить, есть только опция toggle
с jQuery API;кажется излишне ограничивающим ...
Учитывая это, мы можем узнать, будет ли щелчок после нашего события фокуса, используя 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;
})
})()
Я не знаю, нужны ли touchstart
и touchend
, так как большинство браузеров, вероятно, также запускают события мыши при касании.Но лучше, чем потом сожалеть.