如果单击子菜单项,请避免关闭菜单

时间:2015-10-19 13:53:32

标签: javascript jquery menu

这是一个多级菜单。当我点击链接"关于"它打开子菜单,其中包含3个链接Johnny,Julie&杰米。

当我点击"关于"再次,它关闭菜单。单击子菜单也会关闭菜单,我想避免使用。

如果我点击子菜单(Johnny,Julie& Jamie),我如何避免关闭打开的子菜单?



$('li.parent').click(function() {
  $(this).find('.sub-nav').toggleClass('visible');
});

#nav ul.sub-nav {
  display: none;
}
#nav ul.visible {
  display: block;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<ul id="nav">
  <li class="parent">About
    <ul class="sub-nav">
      <li><a href="#">Johnny</a>
      </li>
      <li><a href="#">Julie</a>
      </li>
      <li><a href="#">Jamie</a>
      </li>
    </ul>
  </li>
  <li class="parent">AnotherLink
    <ul class="sub-nav">
      <li><a href="#">Martin</a>
      </li>
      <li><a href="#">Rasmus</a>
      </li>
      <li><a href="#">Morten</a>
      </li>
    </ul>
  </li>
</ul>
&#13;
&#13;
&#13;

3 个答案:

答案 0 :(得分:3)

对于子元素的stopPropagation方法的替代方法是添加一个小的检查,如果被点击的元素是当前元素(而不是它的后代):

import UIKit
import XCTest

class MainViewControllerTests: XCTestCase {

    var controller: MainViewController!

    override func setUp() {
        super.setUp()

        controller = MainViewController()
        controller.view.description
    }

    override func tearDown() {
        super.tearDown()
    }

    func testTableViewOutlet() {
        XCTAssertNotNil(controller.tableView)
    }

    func testTableViewCellForRowAtIndexPath() {
        let indexPath = NSIndexPath(forRow: 0, inSection: 0)

        let cell = controller.tableView(controller.tableView, cellForRowAtIndexPath: indexPath) as! CustomCell

        XCTAssertEqual(cell.countryLabel.text!, "USA")
        XCTAssertEqual(cell.capitalLabel.text!, "Washington, D.C.")
    }
}

&#13;
&#13;
$('li.parent').click(function(e) {
  if (this === e.target)
    $(this).find('.sub-nav').toggleClass('visible');
});
&#13;
$('li.parent').click(function(e) {
  if (this === e.target)
    $(this).find('.sub-nav').toggleClass('visible');
});
&#13;
#nav ul.sub-nav {
  display: none;
}
#nav ul.visible {
  display: block;
}
&#13;
&#13;
&#13;

答案 1 :(得分:2)

您需要在子锚元素上发生<Style TargetType="MenuItem"> <Style.Resources> <Style TargetType="ContentPresenter"> <Style.Triggers> <Trigger Property="ContentSource" Value="Icon"> <Setter Property="ContentTemplate"> <Setter.Value> <DataTemplate> <Image Source="{Binding}"/> </DataTemplate> </Setter.Value> </Setter> </Trigger> </Style.Triggers> </Style> </Style.Resources> <Setter Property="Icon" Value="{Binding Icon, Converter={StaticResource ImageToSourceConverter}}"/> <!-- ... --> </Style> 事件:

stopPropagation

答案 2 :(得分:0)

您需要阻止将final String url = "http://DATA/create"; 元素上的点击传输到您的事件处理程序:https://api.jquery.com/event.stoppropagation/