如何在JQuery UI上实现切换功能可选?

时间:2011-04-19 15:02:57

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

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

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

3 个答案:

答案 0 :(得分:21)

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

$(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');
            }
        });
    });

答案 1 :(得分:1)

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

如果你真的需要它作为默认功能,你不需要使用selectable,你可以像一个简单的onclick处理程序那样做,就像nolabel建议的那样。

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

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

答案 2 :(得分: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*/