【问题标题】:how to add event for all elements except which have a certain class?如何为除具有特定类的所有元素添加事件?
【发布时间】:2010-11-05 13:38:17
【问题描述】:

我想在页面上的所有元素上添加鼠标悬停事件,除了“no_inspect”类,

我想在加载所有页面元素后添加这个事件,我试着这样写:

$('*:not(.no_inspect)').mouseover(MouseOverEvent);

但它不工作,接缝错过了一些东西。

更新不工作意味着:

事件附加到页面上的所有元素“有或没有”这不是我想要的行为。

更新 MouseOverEvent 代码:

function DIOnMouseOver(evt) {
    element = evt.target;

    // set the border around the element
    element.style.borderWidth = '2px';
    element.style.borderStyle = 'solid';
    element.style.borderColor = '#f00';
}

【问题讨论】:

  • “不工作”是什么意思?你有错误吗?事件根本不会触发吗?事件是否分配给了错误的元素?

标签: javascript jquery html css


【解决方案1】:

mouseover 事件冒泡。请改用 mouseenter

另外,为什么要将样式应用于 evt.target?为什么不是“这个”?

function DIOnMouseOver(evt) {
    $(this).css({
        border: '2px solid #f00'
    });
}

正如 Matchu(在 cmets 中)所提到的,另一种避免传播的方法是在您的事件处理程序中调用 event.stopPropagation()

【讨论】:

  • 或者将 evt.stopPropagation() 添加到函数的末尾。
  • 很奇怪,当我改为 mouseenter 而不是 mouseover 时,它工作得很好。你知道为什么鼠标悬停不起作用吗?我认为鼠标悬停在我的情况下是正确的事件。
【解决方案2】:

您发布的代码应该可以工作,您确定鼠标悬停事件没有针对包装您鼠标悬停的元素触发吗?

您使用的是最新最好的 JQuery 版本吗?我知道旧版本在 not 选择器中有某种​​类错误。

你可以试试

$('*').not('.no_inspect').mouseover(MouseOverEvent);

【讨论】:

    猜你喜欢
    • 2019-03-06
    • 1970-01-01
    • 2014-01-30
    • 2015-11-08
    • 2022-08-23
    • 2016-03-19
    • 2023-03-16
    • 2019-07-27
    • 1970-01-01
    相关资源
    最近更新 更多