7

我正在使用 JQuery UI - Selectable。如果元素已被按下并且已被选中,我想取消选择它(切换)

你能帮我添加这个功能吗?

4

3 回答 3

22

由于所有的类回调,你不会比这做得更好:

$(function () {
        $("#selectable").selectable({
            selected: function (event, ui) {
                if ($(ui.selected).hasClass('click-selected')) {
                    $(ui.selected).removeClass('ui-selected click-selected');

                } else {
                    $(ui.selected).addClass('click-selected');

                }
            },
            unselected: function (event, ui) {
                $(ui.unselected).removeClass('click-selected');
            }
        });
    });
于 2011-04-19T16:52:04.917 回答
1

如果您在单击时按住 Ctrl 键,则您已经可以使用 jQuery UI 来选择该功能。

如果您确实需要将其作为默认功能,则不需要使用 selectable,您可以将其作为简单的 onclick 处理程序来执行,就像 nolabel 建议的那样。

或者......您也可以编辑jquery.ui.selectable.js并添加一个选项,这正是您所需要的。不应该太难,有 4 个地方检查event.metaKey,确保您的选项已设置,只需运行代码路径,就好像 event.metaKey 始终为真。

由于可选择项可以使用更多自定义,您还可以向 jQuery UI 开发人员提出功能请求,将其包含在下一个正式版本中。

于 2011-04-19T15:44:24.637 回答
0

你必须在代码中注入两个简单的元素来实现你想要的。每当您需要反转/切换功能时,这只会反转 metaKey 布尔值。

options: {
    appendTo: 'body',
    autoRefresh: true,
    distance: 0,
    filter: '*',
    tolerance: 'touch',
    inverted: false /* <= FIRST*/
},

_mouseStart: function(event) {
    var self = this;

    this.opos = [event.pageX, event.pageY];

    if (this.options.disabled)
        return;

    var options = this.options;

    if (options.inverted) /* <= SECOND*/
        event.metaKey = !event.metaKey; /* <= SECOND*/
于 2011-11-22T11:56:17.253 回答