【问题标题】:click menu <li> and generate other submenu单击菜单 <li> 并生成其他子菜单
【发布时间】:2015-07-25 04:16:43
【问题描述】:

朋友有问题。 从菜单中单击链接时,我需要在所选子菜单项下方生成。

到目前为止,我可以通过ajax发送请求,并生成一个子菜单,但是这个子菜单总是出现在第一个位置:

HTML 代码(简单菜单)

<ul>
   <li><a href="#" data-id="1" class="region_id">Item 1</a>
   <ul id="city"></ul>
   </li>
   <li><a href="#" data-id="2" class="region_id">Item 2</a>
   <ul id="city"></ul>
   </li>
   <li><a href="#" data-id="3" class="region_id">Item 3</a>
   <ul id="city"></ul>
   </li>
   <li><a href="#" data-id="4" class="region_id">Item 4</a>
   <ul id="city"></ul>
   </li>
   <li><a href="#" data-id="5" class="region_id">Item 5</a>
   <ul id="city"></ul>
   </li>
</ul>

JS代码:

$('.region_id').on('click', function(event) {
    event.preventDefault();

    $.get('{!! url("filter_city") !!}', {id : $(this).attr('data-id'), token: $('input[name="_token"]').val() }, function(data) {

       var cities = $('#city');
        cities.empty();

        $.each(data, function(key, value) {
          cities.append($("<li></li>").text(value)); 
        });

    });
});

单击任何选项时得到的结果

因为我能达到我想要的吗?来自智利的问候

【问题讨论】:

  • HTML 中的标识符必须是唯一的。您多次使用id="city",因此您的 HTML 无效。

标签: javascript jquery html css menu


【解决方案1】:

HTML 中的标识符必须是唯一的。您可以使用一个通用类,然后使用各种方法遍历 DOM。

这是一个例子,我使用city 作为 CSS 类而不是 ID。然后可以使用这些方法中的任何一种来识别相关元素。

var cities = $(this).next('.city');
//var cities = $(this).siblings('.city');
//var cities = $(this).closest('li').find('.city');

HTML

<ul>
   <li>
        <a href="#" data-id="1" class="region_id">Item 1</a>
        <ul class="city"></ul>
   </li>
</ul>

脚本

$('.region_id').on('click', function(event) {
    event.preventDefault();
    var cities = $(this).next('.city');

    $.get('{!! url("filter_city") !!}', 
        {
            id : $(this).data('id'), 
            token: $('input[name="_token"]').val() 
        }, 
        function(data) {       
            cities.empty();
            $.each(data, function(key, value) {
              cities.append($("<li></li>").text(value)); 
            });
        }
    );
});

我建议您使用.data() 而不是attr() 来获取data-* 自定义属性值。

var id = $(this).data('id');

【讨论】:

  • 我没有得到任何错误控制台或任何东西,但我不认为子菜单,希望你能帮助我。感谢您的帮助和时间。问候。
  • 非常感谢您的朋友,我为我服务,这正是我想要的。另一件事,正如我可以做的那样,当单击主菜单上的另一个项目时,子菜单会消失。再次感谢您的帮助,您是最棒的。来自智利的问候。
  • @CristianMezaBustos,由于您使用的是cities.empty();,因此您可以改用$('.city').empty();
  • 我的最后一个问题是如何在每次关闭或打开子菜单时应用效果(例如淡入淡出)。非常感谢您的所有帮助。来自智利的问候。
猜你喜欢
  • 2017-06-30
  • 2023-01-10
  • 2019-09-19
  • 1970-01-01
  • 1970-01-01
  • 2018-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多