当mousedown或touchend事件发生在选择器区域之外时,jQuery触发函数

当mousedown或touchend事件发生在选择器区域之外时,jQuery触发函数,jquery,javascript-events,mousedown,mouseup,touchstart,Jquery,Javascript Events,Mousedown,Mouseup,Touchstart,场景:用户单击一个元素,然后拖动它。不过,拖拉会在其他地方结束。我注意到当这种情况发生时,如果我听正在被拖动的元素,它不会触发任何东西,除非在拖动完成时在同一元素上释放光标 如何触发一个事件,该事件从一个元素开始,但在文档的其他任何地方结束 $('#hotels-slider-handle').on('mouseup touchend click', function() { $('#booking-input').trigger('change'); }); 在回答Cerlin老板对

场景:用户单击一个元素,然后拖动它。不过,拖拉会在其他地方结束。我注意到当这种情况发生时,如果我听正在被拖动的元素,它不会触发任何东西,除非在拖动完成时在同一元素上释放光标

如何触发一个事件,该事件从一个元素开始,但在文档的其他任何地方结束

$('#hotels-slider-handle').on('mouseup touchend click', function() {
    $('#booking-input').trigger('change');
});

在回答Cerlin老板对我上面的原始帖子的评论时。。。这就是我想到的并且工作得很好(我需要触发的东西触发得很好)-不过我一直在寻找更有效的解决方案(忽略jQuery延迟,它们在我的范围内是必需的)


获取mousedown和mouseup中的元素,检查mouseup是否在mousedown之外,触发请求哦,真的吗?我只是这么做了,但我认为这是一个糟糕的选择……:)看来我没有找到更好的
var bookingFormInputs = $('#booking-input'),
    hotelsSlider = $('#hotels-slider');
$('#hotels-slider-handle').on('mousedown touchstart', function() {
    $(document).delay(300).one('mouseup touchend', function() {
        $(bookingFormInputs).delay(600).trigger('change');
    });
    $(hotelsSlider).delay(300).one('mouseleave', function() {
        $(document).on('mouseup touchend', function() {
            $(bookingFormInputs).delay(300).trigger('change');
        });
    });
});