【问题标题】:JqueryUI Selectable - unselecting without CtrlJqueryUI Selectable - 在没有 Ctrl 的情况下取消选择
【发布时间】:2015-03-16 00:25:40
【问题描述】:

我正在尝试创建一个带有父/子/孙缩进的可选列表。请看下面:

http://jsfiddle.net/Lmsop4k7/

$('#theParentList').selectable({
    filter: 'li div',
    selected: function (event, ui) {
        var selectedText = $(ui.selected).text();
        $("#selectedNode").text(selectedText);

        if ($(ui.selected).hasClass('selectedfilter')) {
            $(ui.selected).removeClass('selectedfilter');
        }               
    }
});

但是,我在提出“取消选择”功能时遇到了很多问题(即没有按下 Ctrl)。 我也不想将 Ctrl 自动“绑定”到鼠标按下(在其他一些解决方案中对此进行了描述),b/c 我只想一次选择一个项目。另外,我只想了解如何执行控制流以取消选择事件(例如“选定:”)。

我在这里做错了什么?如您所见,由于文本框使用正确的文本正确更新,因此选择被正确拾取。但是,当我单击已单击的项目以“取消选择”(不按住 Ctrl 键)时,它不会取消选择。我认为即使在这种情况下,也会触发“选定”事件 - 但显然我的“选定:”代码有问题。很郁闷..

谢谢大家。

【问题讨论】:

标签: javascript jquery css jquery-ui


【解决方案1】:

试试

// utilize `dblclick` event to remove selected class
$(".ui-selected").one("dblclick", function(e) {
    $(e.target).removeClass("ui-selected")
});

http://jsfiddle.net/Lmsop4k7/3/

【讨论】:

  • 谢谢伙计。但是,我只是为了再一次单击而寻找答案。请看下文。给了你一个 +1。
【解决方案2】:

因此,我对其进行了更多的摆弄,并找到了我需要的东西。请看下文。添加了调试文本,以防以后可能对某人有所帮助。我将为我关于缩进的“附带问题”创建一个不同的线程。谢谢大家。

http://jsfiddle.net/bgfn3091/2/

    $('#theParentList').selectable({
        filter: 'li div',
        selected: function (event, ui) {
            var selectedText = $(ui.selected).text();
            $("#selectedNode").text(selectedText);

            $(ui.selected).removeClass('ui.selected');

            $("#debugText").text("Selected");              

            if ($(ui.selected).hasClass('alreadySelected')) { // clicking to de-select
                $('#theParentList .alreadySelected').removeClass('alreadySelected'); 
                $(ui.selected).removeClass('ui-selected');

                $("#debugText").text("alreadySelected is present and removed");                                  
            }
            else // clicking to select
            {
                $('#theParentList .alreadySelected').removeClass('alreadySelected'); 
                $(ui.selected).addClass('alreadySelected'); // add to just this element

                $("#debugText").text("alreadySelected added");                                                      
            }
        }
    });

【讨论】:

    【解决方案3】:

    这是我的:

    http://jsfiddle.net/carlcarl/Lmsop4k7/4/

    您可以在不按Ctrl 的情况下拖动选择/取消选择。

    在选择/取消选择中,如果您之前选择的所有内容都被选中,则将此操作设置为取消选择。如果之前没有选择多个,则将此操作设置为选择。

    【讨论】:

    • 干得好!我注意到“取消选择”阶段让您感到悲伤,复制,选择一个正方形,然后拖动以取消选择一部分,但是在您将鼠标按钮放回原点之前,所有被触摸的东西都会被取消选择。到目前为止,这是我见过的最好的实现,干得好。
    猜你喜欢
    • 2012-12-23
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 2017-12-27
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    相关资源
    最近更新 更多