7

就我而言,我有一个JQuery UI Selectable应用了插件的 UL,但同时,我希望绑定的项目女巫selectable plugin在我这个项目时正在做某事。double click但似乎JQuery UI Selectable plugin had block the dblclick event. 那么,我怎样才能让它工作呢?

例如:

<script>
    $(function() {
        $( "#selectable" ).selectable();

                $( "#selectable" ).dblclick(function(){
                    // do something here
                })
    });
    </script>

<ul 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>
    <li class="ui-widget-content">Item 7</li>
</ul>

非常感谢你!!

4

6 回答 6

17

如果您添加 .ui-selected 以取消传递给 selectable 方法的选项,那么您可以双击 b/c​​ 它不会在 .ui-selected 项目上引发选择事件。

$('#selectable').selectable({ 
  cancel: '.ui-selected' 
});

虽然,这确实消除了取消选择所选项目的能力。您可以执行以下操作来手动取消选择

$('.ui-selected').on('click', function() {
  $(this)
    .removeClass('ui-selected')
    .parents('.ui-selectable')
    .trigger('selectablestop');

  // you might also want to trigger selectablestop.
});
于 2011-10-26T19:28:55.220 回答
6

您只需将距离设置为 > 0 即可注册点击和双击。

$("#selectable").selectable({
    distance: 1
});

请参阅http://forum.jquery.com/topic/selectable-dosn-t-fire-click-event

于 2012-11-20T15:23:52.073 回答
3
$("#selectable li").mousedown(function(event) {
    if(event.which==1)
    {
        if($(event.currentTarget).data('oneclck')==1)
        {
            alert('click');

            return false;
        }
        else
        {
            $(this).data('oneclck', 1);
            setTimeout(function(){
                $(event.currentTarget).data('oneclck', 0);
            }, 200);
        }
    }
});
于 2011-03-25T21:42:43.270 回答
0

这是因为 onmousedown 触发了选择事件(选择多个可选择元素的虚线 div。)我遇到了同样的问题,我通过在 JQUERY UI 库中添加几行代码来修复它。您需要做的是通过在鼠标移动几个像素后启动选择事件来延迟选择事件。这允许您双击元素并且仍然具有用户友好的选择!:D

这是延迟选择并解决您的问题的代码部分:

<script>
    var content = $('#content').selectable();

    var _mouseStart = content.data('selectable')['_mouseStart'];

    content.data('selectable')['_mouseStart'] = function(e) {
        _mouseStart.call(this, e);
        this.helper.css({
            "top": -1,
            "left": -1
        });
    };
</script>

我在这篇文章中找到了这个解决方法

于 2013-09-25T18:30:30.663 回答
0

我使用它,我认为这是最好的解决方案。

$("ul").selectable({
    filter: "li"
});

$("ul").on("mousedown","li",function(e){
    var n = ($(e.toElement).is(".ui-selected")) ? 1 : 0;
    $("#filelist").selectable( "option", "distance", n );
});

When the user starts a click on a selected elements I set the distance to one so that the doesn't blocks the double click event, but I available if the user really starts selecting.

于 2014-02-16T12:09:16.333 回答
-6

在 jQuery 中,您可以链接事件,如下所示:

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

位我不确定这会起作用,因为这两个事件都是点击事件。

于 2011-02-27T16:07:26.433 回答