繁体   English   中英

在jQuery中复制下拉菜单“ multiple select”

[英]Duplicating a dropdown “multiple select” in jQuery

我有一个搜索页面,用户应该能够在搜索条件中选择多个选项,例如当选择一种染发的搜索条件时,而不是用户只能选择一种染发类型,他们应该能够选择多种类型的发色进行搜索。

这表示在这里:

https://jsfiddle.net/ztjzcLL0/1/

但是,现在我需要创建另一个功能完全相同的东西,但是要符合其他条件,例如兴趣。

我希望代码的工作方式如下所示: https ://jsfiddle.net/nno5fgn6/1/但这只是我将代码两次复制两次的地方,但是当我需要例如这些下拉菜单中的6个时,这不会似乎不是最好的方法。

我如何在上面的第一个jsfiddle做到这jsfiddle

所有这些选择下拉列表都在一个表单中表示,因此我可以传递值并查询它们。

所有这一切都应该正常工作-也是重复的代码,但是这也不是用6个搜索条件来解决这个问题的好方法。

期待听到您的想法。

您可以尝试这样的事情https://jsfiddle.net/nno5fgn6/2/

    $(".dropdown dt a").on('click', function() {
        $(this).parents('.dropdown').find("dd ul").slideToggle('fast');
    });

    $(".dropdown dd ul li a").on('click', function() {
        $(this).parents('.dropdown').find("dd ul").hide();
    });

    function getSelectedValue(id) {
        return $("#" + id).find("dt a span.value").html();
    }

    $(document).bind('click', function(e) {
        var $clicked = $(e.target);
        if (!$clicked.parents().hasClass("dropdown")) $(".dropdown dd ul").hide();
    });

    $('.mutliSelect input[type="checkbox"]').on('click', function() {
        var dd = $(this).parents('.dropdown');
        var title = $(this).closest('.mutliSelect').find('input[type="checkbox"]').val(),
            title = $(this).val() + ",";

        if ($(this).is(':checked')) {
            var html = '<span title="' + title + '">' + title + '</span>';
            dd.find('.multiSel').append(html);
            dd.find(".hida").hide();
        } else {
            $('span[title="' + title + '"]').remove();
            var ret = $(".hida");
            $('.dropdown dt a').append(ret);

        }
    });

使用.parents()fn访问相对包含的元素的地方

是一个例子。

主要思想是使用相同的类和.closest()查找当前下拉列表。

    $(".dropdown dt a").on('click', function() {
      $(this).closest('.dropdown').find("dd ul").slideToggle('fast');
    });

    $(".dropdown dd ul li a").on('click', function() {
      $(this).closest('.dropdown').find("dd ul").hide();
    });

    $(document).bind('click', function(e) {
      var $clicked = $(e.target);
      if (!$clicked.parents().hasClass("dropdown")) {
        $clicked.closest('.dropdown').find("dd ul").hide();
      }
    });

    $('.mutliSelect input[type="checkbox"]').on('click', function() {
      var title = $(this).closest('.mutliSelect').find('input[type="checkbox"]').val(),
        title = $(this).val() + ",";
      var $currentDropdown = $(this).closest('.dropdown');

      if ($(this).is(':checked')) {
        var html = '<span title="' + title + '">' + title + '</span>';
        $currentDropdown.find('.multiSel').append(html);
        $currentDropdown.find(".hida").hide();
      } else {
        $currentDropdown.find('span[title="' + title + '"]').remove();
        var ret = $currentDropdown.find(".hida");
        $currentDropdown.find('dt a').append(ret);

      }
    });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM