Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.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 避免点击触发焦点输出_Javascript_Jquery_Click_Focus_Jquery Focusout - Fatal编程技术网

Javascript 避免点击触发焦点输出

Javascript 避免点击触发焦点输出,javascript,jquery,click,focus,jquery-focusout,Javascript,Jquery,Click,Focus,Jquery Focusout,我正在处理表单的选项卡按钮功能 我正在使用一个插件来定制我表单的所有选择,但现在我陷入了冲突 这是我编写的代码,用于使用屏幕上的选项卡按钮显示下拉菜单列表 $styledSelect.focus(function(e) { var dropdown = $(this).next('ul'); dropdown.show(); }); $styledSelect.focusout(function(e) { var dropdown = $(this).next('ul'); d

我正在处理表单的选项卡按钮功能

我正在使用一个插件来定制我表单的所有选择,但现在我陷入了冲突

这是我编写的代码,用于使用屏幕上的
选项卡
按钮显示下拉菜单列表

$styledSelect.focus(function(e) {
  var dropdown = $(this).next('ul');
  dropdown.show();
});

$styledSelect.focusout(function(e) {
  var dropdown = $(this).next('ul');
  dropdown.hide();
});
问题是,任何单击事件都会触发focusout,因此我无法真正选择select标记的任何选项,因为下拉列表首先被隐藏

你可以看到这里的问题


如何解决此问题?

关闭Burntforest的答案(说明在弹出选项卡时下拉列表未关闭):


您可以设置单击和聚焦处理程序,并对这两个处理程序重复使用相同的逻辑

function setFocus(e) {
  e.stopPropagation();
  $('div.select-styled.active').each(function() {
    $(this).removeClass('active').next('ul.select-options').hide();
  });
  $(this).toggleClass('active').next('ul.select-options').toggle();
};

$styledSelect.click(setFocus);

$styledSelect.focus(setFocus);

更新的代码笔:

感谢您的回答,单击下拉列表后,是否还可以将焦点放在选择标记上?当您从上一个下拉列表中退出选项卡时,此更新将关闭下拉列表。您的更改(添加回focusout)似乎重新引入了原始错误。我已经用一个变通方法更新了我的答案。
function setFocus(e) {
  e.stopPropagation();
  $('div.select-styled.active').each(function() {
    $(this).removeClass('active').next('ul.select-options').hide();
  });
  $(this).toggleClass('active').next('ul.select-options').toggle();
};

$styledSelect.click(setFocus);

$styledSelect.focus(setFocus);