Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.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_Html_Css - Fatal编程技术网

Javascript 如何将此菜单的可单击区域限制为文本?

Javascript 如何将此菜单的可单击区域限制为文本?,javascript,jquery,html,css,Javascript,Jquery,Html,Css,为什么整个宽度是可点击的,我怎样才能改变它 显然,唯一可点击的区域应该是可见的文本,而不是其他 我试过display:inline块,但它弄乱了菜单 谢谢 HTML 整个宽度是可单击的,因为li元素具有列表项显示,其行为指定其宽度为100%。这是误导性的,因为只有锚标记具有指针光标 我用以下内容更新了您的fiddle(): $('.menu-level-1 a').on('click', function() { var parent = $(this).parent();

为什么整个宽度是可点击的,我怎样才能改变它

显然,唯一可点击的区域应该是可见的文本,而不是其他

我试过display:inline块,但它弄乱了菜单

谢谢

HTML


整个宽度是可单击的,因为li元素具有列表项显示,其行为指定其宽度为100%。这是误导性的,因为只有锚标记具有指针光标

我用以下内容更新了您的fiddle():

$('.menu-level-1 a').on('click', function() {
    var parent = $(this).parent();

    ...
});

现在,它将click listener绑定到锚定标记本身,而不是我认为您所期望的.menu-level-1内容和功能。

使用click event forli,而不是使用click event for锚定 在遍历中使用parent()

Jquery:

$('.menu-level-2').hide();
$('.menu-level-1 > a').on('click', function(){      
  if(!($(this).parent().children('.menu-level-2').is(':visible'))){
      $('.menu-level-2').slideUp();
      $(this).parent().children('.menu-level-2').slideDown();
    } else {
    $('.menu-level-2').slideUp();
  }
});
$('.menu-level-2').on('click', function(e){
  e.stopPropagation();
});

下面是JSFIDLE:

只需更改CSS并使用display:table即可

ul li {
    position: relative;
    display: table;
}

在你的小提琴里,它似乎完全按照你想要的那样工作?您可以使用display:inline块,但随后必须添加float:left;明确:两者皆有;如果您希望列表项是垂直的而不是水平的!单击的目标不是文本,而是类。菜单级别1,该类的宽度大于文本的宽度。将鼠标悬停在菜单上,红色背景为文本宽度,绿色为类宽度,非常感谢。我现在明白了。您建议如何修复它?这样,单击第二列将关闭它。它不应该:(我更新了它!我将选择器从.menu-level-1A更改为.menu-level-1>a。我认为它现在可以按照您的要求工作。还有另一个解决方案……哇,太多了!我想我实际上更喜欢这个方案,因为它不会改变我的原始脚本。我可以问一下,您为什么要添加边距底部吗?没有必要,是吗?它是用于在您的小提琴中进行测试的,我已经删除了它。)。
$('.menu-level-2').hide();
$('.menu-level-1 > a').on('click', function(){      
  if(!($(this).parent().children('.menu-level-2').is(':visible'))){
      $('.menu-level-2').slideUp();
      $(this).parent().children('.menu-level-2').slideDown();
    } else {
    $('.menu-level-2').slideUp();
  }
});
$('.menu-level-2').on('click', function(e){
  e.stopPropagation();
});
ul li {
    position: relative;
    display: table;
}