向按钮添加/删除jquery逻辑

Add/remove jquery logic to buttons

本文关键字:jquery 逻辑 删除 按钮 添加      更新时间:2023-09-26

问题:

2个div容器。第一个容器有2个按钮-单个&倍数第二个容器有4个按钮-项目1、项目2、项目3、项目4。

所需逻辑:如果选择按钮Single,我只能从项目1、项目2、项目3或项目4的按钮中选择1。

如果选择按钮Multiple,我可以选择多个项目。1或2项或3或4项。

所选项目将有黑色按钮。所选项目都不会为灰色。

以下是HTML&使用JS。但不知何故,多逻辑不起作用。

HTML:

<div class="select-type">
    <a href="javascript:void(0);" class="single-type">single</a>
    <a href="javascript:void(0);" class="multi-type">Multiple</a>
</div>
<div class="select-item">
  <a href="javascript:void(0);" class="btn">Item 1</a>
  <a href="javascript:void(0);" class="btn">Item 2</a>
  <a href="javascript:void(0);" class="btn">Item 3</a>
  <a href="javascript:void(0);" class="btn">Item 4</a>
</div>

JS:

$('.select-type a').click(function(){
    $('.select-type a').removeClass('selected');
    $(this).addClass('selected');
    if($('.single-type').hasClass('selected')){
        $('.select-item a').removeClass('multiType');
        $('.select-item a').addClass('singleType');
        $('.select-item a.singleType').click(function(){
            $('.select-item a.singleType').addClass('type-deselected');
            $(this).removeClass('type-deselected');
        });
    }
    else if($('.multi-type').hasClass('selected')){
        $('.select-item a').removeClass('singleType');
        $('.select-item a').addClass('multiType');
        $('.select-item a').removeClass('type-deselected');
        $('.select-itema.multiType').click(function(){
            $('.select-item a').addClass('type-deselected');
            $(this).removeClass('type-deselected');
            $(this).addClass('type-selected');
        });
    }
});

这将起作用:

$('.select-type a').click(function() {
  $('.select-type a').removeClass('selected');
  $('.select-item a').removeClass('type-selected').addClass('type-deselected');
  $(this).addClass('selected'); 
});
$('.select-item a').click(function() {
  var $this = $(this);
  var multipleAllowed = $('.select-type a.selected').hasClass('multi-type'); 
  var selectedCount = $('.select-item a.type-selected').length; 
  var selected = $this.hasClass('type-selected');
  if (selected) {
    $this.removeClass('type-selected').addClass('type-deselected');
  } else {
    if (selectedCount == 1 && !multipleAllowed) {
      $('.select-item a').not($this).removeClass('type-selected').addClass('type-deselected'); 
      $this.removeClass('type-deselected').addClass('type-selected');
    } else {
      $(this).addClass('type-selected').removeClass('type-deselected'); 
    }
  }
});
.select-item a,
.select-item a.type-deselected,
.select-type a {
  background-color: grey;
  color: #fff;
}
.select-item a.type-selected,
.select-type a.selected {
  background-color: black;
  color: #fff;
}
<link href="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="select-type">
    <a href="#" class="single-type btn">single</a>
    <a href="#" class="multi-type btn">Multiple</a>
</div>
<br>
<div class="select-item">
  <a href="#" class="btn type-deselected">Item 1</a>
  <a href="#" class="btn type-deselected">Item 2</a>
  <a href="#" class="btn type-deselected">Item 3</a>
  <a href="#" class="btn type-deselected">Item 4</a>
</div>

$('.select-type a').click(function() {
  $('.select-type a').removeClass('selected');//remove selected class on type click
  $('.select-item a').removeClass('selected');//remove selected class on type click
  $(this).addClass('selected');
  if ($('.single-type').hasClass('selected')) {
    $('.select-item').removeClass('multiType').addClass('singleType');
  } else if ($('.multi-type').hasClass('selected')) {
    $('.select-item').removeClass('singleType').addClass('multiType');
  }
});
$('.select-item a').click(function() {
  var check = $(this).parent().hasClass('singleType');
  if (check) {//check if type is single
    if ($('.select-item a').hasClass('selected')) {
      $('.select-item a').removeClass('selected');//if there is selected remove the select class
      $(this).addClass('selected');//add select on click element
    } else {
      $(this).addClass('selected');//add select on click element
    }
  } else {
    $(this).addClass('selected');//add select on click element
  }
});
.selected {
  color: black
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="select-type">
  <a href="javascript:void(0);" class="single-type">single</a>
  <a href="javascript:void(0);" class="multi-type">Multiple</a>
</div>
<div class="select-item">
  <a href="javascript:void(0);" class="btn">Item 1</a>
  <a href="javascript:void(0);" class="btn">Item 2</a>
  <a href="javascript:void(0);" class="btn">Item 3</a>
  <a href="javascript:void(0);" class="btn">Item 4</a>
</div>

尝试这种方式