javascript - 排序完成后解除点击事件的绑定(bind)

标签 javascript jquery jquery-ui-sortable

我有一个图像列表,可以通过 jquery sortable 对其进行排序。我可以拖放图像以进行排序。 现在,每个图像的父 anchor 还附加了灯箱事件的 Click 事件。

因此,当用户单击图像时,它会在灯箱中打开。我还可以将图像拖放到其他地方。

事件冒泡: 当我尝试拖动图像时,点击事件被触发。这是我没想到的。如何在拖动图像时禁用单击事件?

HTML 代码:

<div class="shop-photos">
<div id="shop-photos">
<ul class="ui-sortable">

    <li class="photo-frame media-placeholder media-9108" id="mediaid-9108">
    <a class="preload" data-media-id="9108" href="http://usauto.vo.llnwd.net/o37/dev/07/95/0795f614c4e4d7704e54cc6e48d7ce2c0c16c91b13566015990874.jpg"><img id="9108" data-media-id="9108" src="/shop_portal/api_get_uploaded_photo/?mediaid=9108"></a>
    </li>

    <li class="photo-frame media-placeholder media-9082" id="mediaid-9082">
    <a class="preload" data-media-id="9082" href="http://usauto.vo.llnwd.net/o37/dev/4d/f5/4df5db9819ff891deb60e9c5d85315ccbed41d9413565853192746.jpg"><img id="9082" data-media-id="9082" src="/shop_portal/api_get_uploaded_photo/?mediaid=9082"></a>
    </li>

    <li class="photo-frame media-placeholder media-9089" id="mediaid-9089">
    <a class="preload" data-media-id="9089" href="http://usauto.vo.llnwd.net/o37/dev/9b/24/9b248b3c1308cf3f57f4220ec2aea2c0e954592113565988843784.jpg"><img id="9089" data-media-id="9089" src="/shop_portal/api_get_uploaded_photo/?mediaid=9089"></a>
    </li>

    <li class="photo-frame media-placeholder media-9391" id="mediaid-9391">
    <a class="preload" data-media-id="9391" href="http://usauto.vo.llnwd.net/o37/dev/69/ed/69ed3eac6bfd4af09256e54ed3e5d2d4d4f9948a13572811600895.jpg"><img id="9391" data-media-id="9391" src="/shop_portal/api_get_uploaded_photo/?mediaid=9391"></a>
    </li>

</ul> 
</div>
</div>

我用下面的代码做到了这一点。

$('#shop-photos a').lightBox({overlayBgColor: '#111', overlayOpacity: 0.6, containerResizeSpeed: 150});

     $("#shop-photos ul").sortable({
             start: function(event, ui) {
              ui.item.find("a").unbind("click");
             },
             stop: function(event, ui) {            
               $("#shop-photos a").bind("click");
               },
             opacity: 0.6, 
             cursor: 'move', 
             update: function() {           
                var order = $(this).sortable("serialize"); 
                var arr_mediaid = order.split('&');
                for(var i=0;i<arr_mediaid.length;i++){
                    arr_mediaid[i] = arr_mediaid[i].replace("mediaid[]=", ""); 
                }
                $("input[id=sorted-photos]").val(arr_mediaid);
            }   
        })

我已经正确删除了 anchor 上的点击事件。但是,图像拖动完成后无法返回。

我的问题是排序几次后,点击事件没有出现。解除绑定(bind)事件是否正确触发?我是否已将其解绑回正确的位置?

最佳答案

如果您使用的是最新版本的 jQuery,则意味着您必须使用 .on.off 不推荐使用绑定(bind)。

而不是解除绑定(bind)

ui.item.find("a").off("click");

而不是绑定(bind)

$("#shop-photos a").on("click");

或者如果你想禁用标签上的点击事件

$("#shop-photos a").click(function() { return false; }); 

关于javascript - 排序完成后解除点击事件的绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14516067/

相关文章:

javascript - Jquery ui 可排序不起作用

jQueryUI 可排序、可拖动恢复事件

javascript - 使用纯 JavaScript 在服务器上将 SVG 渲染为 PNG

javascript - 如何在 javascript 或 jquery 中将字符串从 ascii 转换为十六进制

javascript - 无法使用ajax将文件发送到php文件

jquery - 数据表滚动 不需要时启用

javascript - jquery 在可排序中交换排序

javascript - Webscraper被封——如何进行Puppeteer IP地址轮换?

javascript - 无法在我的组件中调用 redux 操作

javascript - Jquery 事件页面链接