为每个 UL 块中的按钮设置 onClick 动作 Jquery

Set onClick action for button in each UL block Jquery

我有 10 个 (ul) 块,它们是用 $windows.onLoad 动态构建的,在每个块中我都有术语列表 (li)。每个块中的某些术语最初必须是不可见的。我只在脚本中使用 Jquery 选择器执行所有操作。

window).load(function () {
            $.ajax({
                url: '@controllers.blog.routes.BlogController.allBlogTerms()',
                type: 'get',
                success: function (terms) {

                    var urlPrefix = "@translateUrl(controllers.blog.routes.BlogController.termItem("").url)";
                    for (var l = 0; l < terms.length; l++) {
                        $('.list_of_terms').append('<div class="item col-md-4">\
                                <div class="inner_item">\
                                <div class="capital">\
                                ' + terms[l].letter + '\
                                </div>\
                                <ul class="ul' + l + '">\
                                </ul>\
                                </div>\
                                </div>\
                                <div class="clearfix"></div>');
                        for (var t = 0; t <= terms[l].terms.length - 1; t++) {
                            if (t > 5)
                                $('.ul' + l).append('<li style="display:none;"><a href="' + urlPrefix + terms[l].terms[t].url + '">' + terms[l].terms[t].title + '</a></li>');
                            else
                                $('.ul' + l).append('<li><a href="' + urlPrefix + terms[l].terms[t].url + '">' + terms[l].terms[t].title + '</a></li>');
                        }

所以我在这个块上创建了一个按钮来管理其中列表的可见性。 但是我在将每个按钮与每个块耦合时遇到了问题。当我在某个块上按它时 - 它在所有块中显示 'li' 的内容。

 $.fn.myFunc = function() {

                                $('li').show();
                        };


                        $('.ul' + l).append('<button type="button" onclick="$(this).myFunc(????);">Canada</button>');

当我尝试传递参数 "l"(即块数)时,它无法在范围内识别它(现在是问号)。 那么我如何参数化我的按钮,以便它们只能作用于它们所在的 UL

$('li').show();

将显示页面上的所有 li 元素。

希望这个例子对你有所帮助:

<body>
    <ul class='ul1'>
      <li>Argentina</li>
      <li>Albania</li>
      <li>Australia</li>
    </ul>

    <ul class='ul2'>
     <li>Belgium</li>
     <li>Bangladesh</li>
     <li>Bahrain</li>
   </ul>
 </body>
 <script type="text/javascript">
    // the button click event handler
    function showItems(){
      // get the class attribute of the ul element 
      // (assuming it has 1 class only):
      var ul = $(this).parent().attr('class');

      // create a selector using the id of the ul $(.ul1 li), $(.ul2 li):
      $('.'+ul+' li').show();
    }

    // add buttons to the lists:
    $('.ul1').prepend('<button type="button" class="btn">A</button>');
    $('.ul2').prepend('<button type="button" class="btn"">B</button>');
    $('li').hide();

    // bind the showItems click event handler to the buttons:
    $(document).on('click', '.btn', showItems);