【问题标题】:Jquery Top Package SelectorJquery 顶级包选择器
【发布时间】:2018-11-06 23:25:05
【问题描述】:

我有多个包可供选择。

<div class="image-grid-item" data-search="select">
<input name="pack1" type="checkbox" style="display: none;">
</div>
<div class="image-grid-item" data-search="select">
<input name="pack1" type="checkbox" style="display: none;">
</div>
<div class="image-grid-item" data-search="select">
<input name="pack2" type="checkbox" style="display: none;">
</div>
<div class="image-grid-item" data-search="select">
<input name="pack2" type="checkbox" style="display: none;">
</div>
<div class="image-grid-item" data-search="select">
<input name="pack3" type="checkbox" style="display: none;">
</div>
<div class="image-grid-item" data-search="select">
<input name="pack3" type="checkbox" style="display: none;">
</div>

同样,我有很多属于不同包裹的物品。

这是我的 jQuery

  jQuery(".image-grid-item").click(function(){
     jQuery('input', this).prop("checked", true);
     //alert("test");

     if(jQuery('input[name="pack1"]').prop("checked") == true){        
        jQuery('.package1').show();
      }
      else if(jQuery('input[name="pack2"]').prop("checked") == true){        
        jQuery('.package2').show();
      }
      else if(jQuery('input[name="pack3"]').prop("checked") == true){        
        jQuery('.package3').show();
      }

      else{
        // jQuery('input',this).prop('checked', true);

      }
  });

这是我的 div,它显示了正确的包。

<div class="package1" style="display: none;">
package1
</div>
<div class="package2" style="display: none;">
package2
</div>
<div class="package3" style="display: none;">
package3
</div>

如果我选择 package1 它显示正确的包,但是当我选择 package1 和 package3 它显示两个包,但我只想显示 package3。 或者当我选择 package1 和 package2 时,它只需要显示更大的包意味着 package2。

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    这是一个非常简单的逻辑,需要完成。请从这个示例中学习,并尝试思考一个问题或尝试解决问题,然后再发布到这里......它还有很长的路要走。

    查看代码 cmets 以了解其工作原理。

    //When we click on the div
    
    $('.image-grid-item').on('click', function() {
      var selected = [];
    
      //Allow a package to be selected & deslected
      if ($(this).children().prop('checked') == true) {
        $(this).children().prop('checked', false)
      } else {
        $(this).children().prop('checked', true)
      }
    
    
      //For every div on the pack
      $('.image-grid-item').each(function(index, element) {
    
        //Check if the input inside of it is checked
        if ($(element).children().prop('checked') == true) {
    
          // if it is checked then store the package number in the array
          selected.push($(element).data('package'));
        }
      });
    
    
      var packageSizes = [];
      //Loop through the array of selected packages we made earlier 
      $.each(selected, function(index, value) {
    
        //Then loop through each package div on the page
        $('.package').each(function(index, element) {
        
          /*If the current item in the loop has the same data attribute value
          as the div we are also currently looping, then... 
          */
          if ($(element).data('package') == value) {
          
            //Store the package size in the package array
            packageSizes.push($(element).data('size'))
          }
          
          //(Or in other words, if we check a box, store the package size in an array)
        });
      })
    
    
      //Now we have the sizes of w/e packages are selected, get the largest size
      var largestPackage = Math.max.apply(Math, packageSizes);
    
      //Hide all packages initiallly
      $('.package').hide();
      
      //Loop through all package divs
      $('.package').each(function(index, element) {
      
        //If the package's size is equal to the largest package we selected then...
        if ($(element).data('size') == largestPackage) {
        
          //Display only that largest package
          $(element).show();
        }
      });
    })
    .image-grid-item {
      border: 1px solid red;
      width: 80px;
      height: 15px;
      padding: 5px;
      display: inline-block;
      text-align: center;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    
    <div class="image-grid-item" data-package="1" data-search="select">
      <label>size 5</label>
      <input name="pack1" type="checkbox">
    </div>
    <div class="image-grid-item" data-package="2" data-search="select">
      <label>size 10</label>
      <input name="pack2" type="checkbox">
    </div>
    <div class="image-grid-item" data-package="3" data-search="select">
      <label>size 15</label>
      <input name="pack3" type="checkbox">
    </div>
    
    <div class="package" data-package="1" data-size="5" style="display: none;">
      package1
    </div>
    <div class="package" data-package="2" data-size="10" style="display: none;">
      package2
    </div>
    <div class="package" data-package="3" data-size="15" style="display: none;">
      package3
    </div>

    如果您觉得此答案解决了您的问题,请点击投票箭头旁边的复选标记按钮。如果您对此答案还有其他问题/疑问,请在下方评论。

    同样值得注意的是,这种方法可以减少并提高效率,但我发现这样的写作更容易理解和阅读。

    编码愉快!

    【讨论】:

    • 这不是我要找的。如果我点击 package1 和 package2,它应该是 show package2。必须启用多项选择。
    • 我的答案已更改,请再试一次。另外,这与我最初写的并没有太大的不同……从我最初的写出来应该不难,但我离题了。
    • 你的回答很好,对我实现目标很有帮助。但现在我的情况发生了变化。这就是为什么我要求回答。如果你帮我解决这个问题,我会很高兴的。
    • 堆栈溢出不是这样工作的。您在 here 提出了一个特定问题,而我的解决方案适用于 here 发布的问题 - 所以您应该接受 thisthis 的回答> 问题。您的另一个问题是完全分开的。不要试图将我的解决方案作为其他无关问题的人质...
    猜你喜欢
    • 1970-01-01
    • 2010-10-26
    • 2019-10-06
    • 2011-03-01
    • 2015-03-07
    • 2016-10-06
    • 2013-12-02
    • 2023-04-04
    • 1970-01-01
    相关资源
    最近更新 更多