当前位置: 首页 > 面试题库 >

是否可以绑定到任何样式更改的事件侦听器

东方淇
2023-03-14
问题内容

是否可以在jQuery中创建可以绑定到任何样式更改的事件侦听器?例如,如果我想在元素更改尺寸或对style属性进行任何其他更改时“执行”操作,则可以执行以下操作:

$('div').bind('style', function() {
    console.log($(this).css('height'));
});

$('div').height(100); // yields '100'

这将非常有用。

有任何想法吗?

更新

很抱歉自己回答这个问题,但是我写了一个可能适合其他人的简洁解决方案:

(function() {
    var ev = new $.Event('style'),
        orig = $.fn.css;
    $.fn.css = function() {
        $(this).trigger(ev);
        return orig.apply(this, arguments);
    }
})();

这将临时覆盖内部prototype.css方法,并在最后使用触发器重新定义它。所以它是这样的:

$('p').bind('style', function(e) {
    console.log( $(this).attr('style') );
});

$('p').width(100);
$('p').css('color','red');

问题答案:

由于jQuery是开源的,因此我想您可以对css函数进行调整,以使其在每次调用时都传递给您选择的函数(传递jQuery对象)。当然,您需要搜索jQuery代码以确保其内部没有用于设置CSS属性的其他东西。理想情况下,您希望为jQuery编写一个单独的插件,以使其不干扰jQuery库本身,但是您必须确定这对您的项目是否可行。



 类似资料:
  • 问题内容: 我有2种不同类型的事件,我希望我的班级能够监听并相应地(和不同地)进行处理。 我试过了: 这给了我一个错误,即您无法使用不同的参数两次实现相同的接口。 除了实现ApplicationEvent的侦听器(或Foo和Bar将实现的某些其他公共接口)并用于确定采用哪种路径之外,我还有其他选择吗? 谢谢! 问题答案: 请参阅此答案结尾的Spring 4.2更新! 春季 <4.2 并不是的。 您

  • 问题内容: 本质上,我希望更改内容时执行脚本。由于脚本是分开的(Chrome扩展程序和网页脚本中的内容脚本),因此我需要一种方法来简单地观察DOM状态的变化。我可以设置轮询,但这似乎草率。 问题答案: 长期以来,DOM3突变事件是最佳的可用解决方案,但由于性能原因,不建议使用它们。DOM4突变观察者代替了不推荐使用的DOM3突变事件。目前,它们在现代浏览器中的实现方式为(或在旧版Chrome中由供

  • 我正在编写一个手势/动作库,它还管理事件侦听器和触发。我已经实现了我的库,通过一个API支持手势对象设置被动侦听器,该API如下:。My lib支持多种手势,设置多个听众,包括被动和非被动。lib将确保最多只有一个真正的侦听器连接到DOM。因此,我们最多可以有2个touchstart监听器,其中一个是被动监听器,另一个不是。 我的问题和问题是,我无法检测接收到的事件是否附加了选项。我认为我可以在本

  • 问题内容: 我希望消息框在用户更改文本字段中的值后立即显示。目前,我需要按Enter键才能弹出消息框。我的代码有什么问题吗? 任何帮助,将不胜感激! 问题答案: 将侦听器添加到为您自动创建的基础文档中。

  • 问题内容: 在JavaScript中,删除使用bind()添加为事件侦听器的函数的最佳方法是什么? 例 我能想到的唯一方法是跟踪添加了bind的每个侦听器。 上面的示例使用此方法: 有没有更好的方法可以做到这一点? 问题答案: 尽管@machineghost所说的是正确的,但事件的添加和删除方式相同,但等式中缺少的部分是: 调用后会创建一个新的函数引用! 因此,要添加或删除它,请将引用分配给变量:

  • 问题内容: 在以下示例代码中,我将事件处理程序附加到包含文本“foo”的范围。该处理程序是一个匿名函数,会弹出一个。 但是,如果我将其分配给父节点的,则此事件处理程序将被销毁-单击“ foo”将无法弹出警报框。 这个可以解决吗? 问题答案: 不幸的是,即使您尝试附加,分配给也会导致所有子元素的破坏。如果要保留子节点(及其事件处理程序),则需要使用DOM函数: 编辑: 鲍勃的解决方案,从评论。发表您