【问题标题】:Click event triggering after dragging a button拖动按钮后触发点击事件
【发布时间】:2015-01-15 09:35:21
【问题描述】:

我有一个带有点击事件的按钮,我想让该按钮可拖动。我所做的是,

$(function() {
$( "#btn-1834" ).draggable({
        cancel: false
    });
});

这是拖动按钮的脚本。但是当我拖动它时会触发点击事件。 是否有任何解决方案,意味着我想拖动该按钮但在拖动后不触发单击事件,并且该按钮必须有一个单击事件。

按钮Id和modalId是动态生成的

【问题讨论】:

  • 如何绑定你的点击功能?根据这个example,拖动时不会触发点击事件

标签: jquery onclick draggable


【解决方案1】:

解决此问题的一种方法是在某处设置一个标志,指示您正在拖动元素,然后在拖动完成几毫秒后清除该标志。

然后,在您的点击处理程序中,检查标志是否已设置 - 如果已设置,则不要执行任何操作。

具体的实现可能会因您使用的库而有很大差异,因此恐怕我无法更具体地介绍。

【讨论】:

    【解决方案2】:
    $('#btn-1834').draggable({
        cancel: false
    }).on('mouseup', function (e) {
        e.preventDefault();
        // your release code
    });
    

    或者,您可以将发布代码绑定到停止事件:

    $('#btn-1834').draggable({
        cancel: false,
        stop: function (e, ui) {
            // your release code
        })
    }) // ..
    

    【讨论】:

    • 这不会取消所有与mouseup 相关的事件 - 包括click
    【解决方案3】:

    你可以像这样使用关闭功能

    $(function() {
    $( "#btn-1834" ).off('click');
    $( "#btn-1834" ).draggable({
            cancel: false
        });
    });
    

    调用拖拽函数后可以使用on进行点击事件

    【讨论】:

    • 如问题:there must be a click event for that button。您的答案是删除此事件
    • @empiric 我没有完整阅读这个问题,我的错误,修改了答案
    【解决方案4】:

    试试下面的代码。

    var clickFlag = true;
    $('#btn-1834').click(function(){
        if(clickFlag){
            //do the click action
        }
    })
    $('#btn-1834').draggable({
        cancel: false,
        start:function(e,ui){
            clickFlag = false;
        },
        stop: function (e, ui) {
            clickFlag = true;
        }
    });
    

    注意:我还没有测试过。

    更新

    不需要标志或任何东西。只需在可拖动事件之后分配点击事件,它就可以正常工作

    FIDDLE

    更新 2

    删除data-target属性并以相同的顺序运行此代码[重要]

    $('#btn-1834').draggable({
        cancel: false
    });
    
    $('#btn-1834').click(function(){
        $('#key_edit_modal_1834').modal('show');
    })
    

    更新 3

    把你的html改成

    <button type="button" class="btn btn-default default-key keypress btn_row1 modalbtn" id="btn-<%= key_position.id %>" data-id="<%= key_position.id %>"></button>
    
    <div id="key_edit_modal_<%= key_position.id %>" class="modal fade">
    

    并在可拖动后运行它

    $(document).on('click','.modalbtn',function(){
        $('#key_edit_modal_'+$(this).data('id')).modal('show');
    })
    

    【讨论】:

    • 对不起,这是我的错误,这是该按钮上的一个数据目标,用于显示用于编辑按钮文本的模式弹出窗口。那我该怎么办呢?
    • 请同时发布这些代码。如果您使用的是引导程序,则删除目标并使用 javascript 触发模态
    • 跨度>
    • 但是现在问题是模态ID和按钮ID是动态生成的。那么如何使用动态生成的按钮id和模态id的js函数
    • 然后分享一些动态生成的html...也请在你的问题中添加这个
    猜你喜欢
    • 1970-01-01
    • 2016-07-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-04
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多