【问题标题】:Remove Attributes onmouseover and onmouseout删除属性 onmouseover 和 onmouseout
【发布时间】:2010-05-22 22:08:00
【问题描述】:

我正在尝试像这样使用 JQuery 的 remove 属性:

$('#rom-img_1').removeAttr('mouseover');
$('#rom-img_2').removeAttr('mouseout');

但是,它不会删除事件的影响,因为事件仍会在 mouseover 和 mouseout 时触发。我也尝试在事件名称前添加“on”,但 JQuery 不会那样使用它。

为什么这不起作用以及如何删除这些属性。

这是一段 HTML:

<div onmouseout="$('#heart_401').css({'display':'none'});" onmouseover="$('#heart_401').css({'display':'block'});" id="row-img_11"></div>

感谢大家的帮助

【问题讨论】:

  • 一旦浏览器解析了它们,它们就是事件处理程序,也许仍然是属性,这取决于浏览器...不是首先将它们插入一个选项吗?
  • 当我使用 firebug 删除属性时,似乎不再触发事件,这是由于 firebug 还是应用删除属性时会发生什么?

标签: javascript jquery


【解决方案1】:

永远不要在 html 代码中使用 onsomething 来注册事件处理程序。它会降低您的标记的可读性并导致各种问题(例如 this 未指向该元素)。

始终使用$(...).mouseover(function() { /* yourcode */ })$(...).bind('mouseover', function() { /* yourcode */ }) 注册它们。

然后您可以使用$(...).unbind('mouseover') 轻松删除句柄。

当然,您也可以使用其他处理程序,例如 clickfocus 来代替 mouseover

removeAttr 不起作用的原因是处理程序不是属性。在内部,它们变成了处理程序,因此您不能通过删除属性来删除它们。 但是,这可能有效:

$('#rom-img_1')[0].mouseover = function() {};
$('#rom-img_1')[0].mouseout = function() {};

【讨论】:

【解决方案2】:
$('#rom-img_1')

你拼错了row-img_11。 jQuery 不会出错,你只会得到一个没有匹配的选择器结果。

onmouseoverremoveAttr 对我有效,但您通常希望避免使用这样的内联事件处理程序属性。

【讨论】:

  • 其实你是对的,有一个拼写错误,但不是我的类型,而是“rom”而不是“row”!该死的!我不知道为什么有人否定你,但这是正确的答案。
【解决方案3】:

要在 jQuery 中获取和设置 mouseover 和 mouseout 事件,请使用 .mouseover().mouseout()。语法如下:

设置(在这种情况下删除):

$("#row-img_11").mouseover("");
$("#row-img_11").mouseout("");

将方法应用于一组 div:

$("div:contains('row-img')").each(function() {
    $(this).mouseover("");
    $(this).mouseout("");
});

【讨论】:

    【解决方案4】:

    如果你只是把 id 拼写对了,它就可以了:

    $('#row-img_11').removeAttr('onmouseover').removeAttr('onmouseout');
    

    【讨论】:

      猜你喜欢
      • 2023-03-03
      • 1970-01-01
      • 2012-02-04
      • 2015-08-27
      • 1970-01-01
      • 1970-01-01
      • 2014-07-21
      • 2011-06-27
      • 2012-12-12
      相关资源
      最近更新 更多