【问题标题】:jQuery UI selectable widget multiple unselect with mouse dragjQuery UI 可选小部件通过鼠标拖动多次取消选择
【发布时间】:2016-12-29 02:46:49
【问题描述】:

我正在使用 jQuery UI 可选小部件。我在Is there a way to change event parameters in jQuery? 看到了一个解决方案,可以启用多项选择(使用鼠标拖动),效果很好。现在我正在尝试获得类似的功能来取消选择多个不起作用的元素。

$('#selectlist').on("mousedown", function (e) {
    e.metaKey = true; //multiple select true
    //e.ctrlKey = true;
}).selectable({
    filter: '.select-li',
    selecting: function (event, ui) {
        debugger;
        //if ($(ui.selecting).hasClass('li-planned')) {
        //    $(ui.selecting).removeClass("ui-selecting");
        //}
    },
    unselecting: function (event, ui) {
        //if ($(ui.unselecting).hasClass('li-planned')) {
        //    $(ui.unselecting).removeClass("ui-unselecting").addClass('ui-selected');
        //}
    },
    stop: function (event) {
        //debugger;
        //do some work here
    }
})

我尝试了多种选择来实现,但到目前为止我无法获得它。任何帮助将不胜感激。

【问题讨论】:

标签: javascript jquery jquery-ui jquery-ui-selectable


【解决方案1】:

$(function() {
  $("#selectable").bind("mousedown", function(e) {
    e.metaKey = true;
  }).selectable();
  $("#selectable").selectable({
    selected: function(event, ui) {
      if (!$(ui.selected).hasClass('selected-flag')) {
        $(ui.selected).addClass('selected-flag');
      } else {
        $(ui.selected).removeClass("ui-selected selected-flag");
      }
    }
  });
});
#feedback {
  font-size: 1.4em;
}
#selectable .ui-selecting {
  background: #FECA40;
}
#selectable .ui-selected {
  background: #F39814;
  color: white;
}
#selectable {
  list-style-type: none;
  margin: 0;
  padding: 0;
  width: 60%;
}
#selectable li {
  margin: 3px;
  padding: 0.4em;
  font-size: 1.4em;
  height: 18px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.6/themes/base/jquery-ui.css" type="text/css" media="all">
<script src="https://code.jquery.com/ui/1.8.5/jquery-ui.min.js"></script>

<div class="demo">
  <ol id="selectable">
    <li class="ui-widget-content">Item 1</li>
    <li class="ui-widget-content">Item 2</li>
    <li class="ui-widget-content">Item 3</li>
    <li class="ui-widget-content">Item 4</li>
    <li class="ui-widget-content">Item 5</li>
    <li class="ui-widget-content">Item 6</li>
  </ol>

</div>

我创建了一个解决方案 here 并在我的答案中添加了 sn-p。在这里,我在 select 事件中为元素添加了一个标志类,以便稍后确定哪些项目被选中,然后从它们中删除 ui-selected 和标志类,然后使其未选中。我想这就是你要找的。​​p>

【讨论】:

  • 感谢您的回答。在我做了更多研究之后,我一直在做同样的事情,但它看起来像一个黑客而不是一个永久的解决方案。这就是为什么我放了一个赏金,以便如果有任何内置功能我可以利用而不是调用选定的事件并取消选择某些东西。
  • 在你的问题中,你说你无法做到这一点
  • 这看起来像是一个有效的解决方案,我不知道是否有更“内置”的方式来完成此操作,然后点击“选定”事件。
  • 特雷弗,你是对的。 Aminur 的回复是我迄今为止得到的最接近的回复。它只是我想获得更多的本地方法。我现在正在关闭这个赏金。谢谢阿米努尔。
【解决方案2】:

您可以简单地通过以下方式选择您的列表

 $( "#selectlist" ).selectable();

您可以在不按下鼠标的情况下对可选择项进行多项选择

  1. 鼠标拖动
  2. 选择时按Ctrl

取消选择多个(基于上面的选择)

1.a.选择一个,其他所有将取消选择
1.b。在列表中选择一个空白区域(例如 list1 和 list2 之间的空格),所有将取消选择
2. 取消选择时按Ctrl

查看 jQuery-ui 的演示 http://jqueryui.com/selectable/#default

【讨论】:

  • 演示网址不支持多次取消选择。同样正如我之前提到的,当我再次单击列表时,我想保留选择。这就是我设置e.metaKey = true的原因。
【解决方案3】:

我认为 Aminur 根据所提供的信息回答了您的问题。这可能是我在阅读您在他的回答下的反馈之前以为您所追求的。

这是另一个建议。如果用户开始拖动已经选定的项目,此提案基本上会清除所有选定的项目。当您说要取消选择多个元素时,也许这就是您所追求的。

$(function() {
  $("#selectable").bind("mousedown", function(e) {
    if(e.target.className.indexOf('ui-selected') === -1){
        e.metaKey = true;
    }
  }).selectable();
});

Fiddle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    相关资源
    最近更新 更多