【问题标题】:How to override a jQuery bind for a child element?如何覆盖子元素的 jQuery 绑定?
【发布时间】:2011-11-15 06:34:07
【问题描述】:

我的鼠标操作触发了 html 和 body 上的自定义功能,但是页面上的滚动条和表单现在对鼠标单击没有响应!

$('html,body').bind('mousedown mouseup mouseover mousemove', function(e){
    e.preventDefault(); //this is required :(
    customFunction();
});

(为什么我需要阻止默认值?完整的 customFunction here

如何在保持表单可用和滚动条正常工作的同时保留正文绑定?

我在这里有一个 JSFiddle 演示,准确地展示了正在发生的事情:
http://jsfiddle.net/Ywg9T/

【问题讨论】:

  • 做e.preventDefault()的目的是什么?你想防止什么?
  • 您可以使用e.target找出鼠标正下方的内容,并有条件地检查以避免某些元素上的preventDefault。
  • 也许event.stopPropagation() 会有所帮助?测试here 看看这是不是你需要的!
  • @Ergec:我正在使用自定义光标类(抓手),如果您不阻止默认设置,则在 chrome 中,光标会变成文本选择工具并破坏抓手自定义光标,完全停止脚本。脚本在这里:jsfiddle.net/upEAx
  • @Ben Lee,我是一名初级程序员,您能否提供一个示例以便我更好地理解?谢谢你。也许您甚至可以将其发布为答案。

标签: jquery forms binding jquery-selectors scroll


【解决方案1】:

这是 jQuery 中的一个错误,与开始选择的事件有关。它开火太频繁了。有一张为它提交的票,它计划在 1.8 中修复。同时,您可以通过删除该事件处理程序来解决此问题(其中“元素”是您要禁用它的元素——在您的情况下,是整个文档):

element.onselectstart = function () { return false; };

那你就不用preventDefault了。因此,您的代码将如下所示:

document.onselectstart = function () { return false; };
(function($){
    var drag = false;
    $("#click").bind('mousedown mouseup mouseover mousemove', function(e) {
        if(e.type === 'mouseover'){ ... }
        if(e.type === 'mousemove'){ ... }
        if(e.type === 'mousedown'){ ... }
        if(e.type === 'mouseup'){ ... }
    });
})(jQuery);

【讨论】:

    猜你喜欢
    • 2017-11-09
    • 1970-01-01
    • 2020-08-11
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    • 2014-02-08
    • 1970-01-01
    • 2017-11-07
    相关资源
    最近更新 更多