【问题标题】:How to make elements select-able using jquery如何使用 jquery 使元素可选
【发布时间】:2013-07-19 05:04:22
【问题描述】:

我想在用户点击列表项时选择它们。但我不想使用可选择的 jQuery ui。请更新我的代码,以便可以像在 Windows 资源管理器中一样选择我网站上的元素(仅 li)。

  <ol id="browse-files">
    <li class="browse-file row">
      <div class="span6 file-name-col">timesNew.zip</div>
      <div class="span2 file-type-col">ZIP file</div>
      <div class="span2 file-size-col">1.08MB</div>
      <div class="span2 file-uploaded-col">23//6/2013</div>
    </li>
    <li class="browse-file row">
      <div class="span6 file-name-col">Photos.zip</div>
      <div class="span2 file-type-col">ZIP file</div>
      <div class="span2 file-size-col">30.19MB</div>
      <div class="span2 file-uploaded-col">23//6/2013</div>
    </li>
    <li class="browse-file row">
      <div class="span6 file-name-col">Docs.zip</div>
      <div class="span2 file-type-col">ZIP file</div>
      <div class="span2 file-size-col">12.38MB</div>
      <div class="span2 file-uploaded-col">23//6/2013</div>
    </li>
  </ol>

这是css

ol#browse-files {
    margin: 0;
    padding: 0;
    list-style: none;
}
ol#browse-files li {
    line-height: 40px;
    border-bottom: solid 1px #dcdcdc;
}
ol#browse-files li:hover {
    background-color: #dff0d8;
}
ol#browse-files li.active {
    background-color: #468847;
    color: #fff;
}

这里有 jQuery 代码

$(document).ready(function() {
   $('ol#browse-files li').click(function(e) {
      if(e.ctrlKey){                                 //Select multiple files with ctrl
          $(this).toggleClass('active')
      } 

      else if($(this).hasClass('active')){
      $(this).toggleClass('active');
      } 

      else {
      $('ol#browse-files li').removeClass('active');
      $(this).addClass('active');
      }
   });

   $('.container:not(ol li)').click(function(e) {     // It works well without this but i want to deselect when user click anywhere else.
      $('ol#browse-files li').removeClass('active');
  });
});

【问题讨论】:

标签: jquery list selectable jquery-ui-selectable


【解决方案1】:

DEMO HERE

使用e.stopPropagation() 停止将点击事件冒泡到容器;

$('ol#browse-files li').click(function (e) {
        e.stopPropagation();
        if (e.ctrlKey) { //Select multiple files with ctrl
            $(this).toggleClass('active');
        } else if ($(this).hasClass('active')) {
            $(this).toggleClass('active');
        } else {
            $('ol#browse-files li').removeClass('active');
            $(this).addClass('active');
        }
});

$(".container").not("ol li").click(function (e) { 
       $('ol#browse-files li').removeClass('active');
});

现在选择一些li后,当您单击容器(灰色区域)时,将根据需要删除选择

【讨论】:

  • 谢谢@anu,它有效。您能否改进我的代码,以便使用 shift 键选择多个 lis 也可以工作(就像在 Windows 资源管理器中选择多个文件一样)。
  • 也许我误解了你的要求。在这个小提琴中,当您选择一个元素然后按 shift 和向上或向下箭头键后,它将选择上一个或下一个元素。
  • 当我点击第一个 li 时,它将被选中。现在,如果我按住 shift 键并单击非共轭 li,那么它也会选择它们之间的所有 lis。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-19
  • 2012-04-12
  • 2012-05-17
  • 1970-01-01
相关资源
最近更新 更多