【问题标题】:How to check if onresize method is set?如何检查是否设置了 onresize 方法?
【发布时间】:2013-08-04 17:59:41
【问题描述】:

我可以检查是否设置了 onresize 方法吗?

我以前用过:

$(window).resize(function() { /* ... */ });

由于另一个库中的未知错误,onresize 不再被调用。执行上述行后,它再次完美运行。该方法被调用一次。如果我再次在 Firebug 控制台中执行该行,则会调用该方法两次。

我想写一个解决方法,它会在“重置”后立即设置onresize

我正在寻找类似的东西:(undefined or null)

if (window.onresize == undefined) { /* ... */ }

外部库/框架是 Richfaces 4(扩展数据表)。一旦我对一列进行排序,一些 onresize 函数处理程序就消失了。

之前:

$._data(window,'events').resize

// result on the Chrome console: 
[Object, Object, Object, Object]

使用排序后:

$._data(window,'events').resize

// result on the Chrome console: 
[Object]

我正在寻找一种方法来编写解决方法。

JIRA 问题

【问题讨论】:

  • 一重置?你那是什么意思?您想检查屏幕是否调整大小并触发功能?
  • 为什么不适当地使用jQuery的.on.off呢?那不行吗?
  • @IanClark - +1,每当有人需要检查是否设置了事件处理程序时,他们可能做错了什么。
  • 修复另一个库中的错误,而不是解决它。可能他们正在调用$(window).off("resize"),而没有将其限制为他们自己的事件处理程序。
  • 听起来你的插件在没有命名空间的情况下调用.off。对开发人员大喊大叫,直到他们解决这个问题。他们是一个糟糕的开发人员。

标签: javascript jquery richfaces


【解决方案1】:

您可以使用$._data(),这不是公开支持的方法:

$(window).on('load',function() {
    if(!$._data(window,'events').resize)
        alert('none resize bound');
});

在旧的 jquery 版本中它是:$.data()

【讨论】:

  • 为什么不只是$(window).data("events").['resize']
  • @IanClark 自 jQuery 1.8 起不再支持。
  • @IanClark 这是为了避免与 DOM 对象的 .data() 方法混淆,而不是将 $.data() 更改为 $._data() '_' 按照惯例表示内部方法。
  • @IanClark 不是因为 $._data() 方法不是公共方法
  • 不,但我在问你为什么不能使用data() 方法,查看docs 我没有看到它被贬值
【解决方案2】:

我在项目中使用的是

 $(window).unbind('resize').bind('resize',function(){
//code here
});

它将删除所有以前绑定(注册)的处理程序以调整大小事件并将这个新函数注册为处理程序。 仅当您要附加单个事件处理程序时,此方法才有用。

【讨论】:

  • 这看起来和其他库中的错误一模一样。
  • "当然在你只需要一个调整大小处理程序时使用它"。请使用命名空间。它们的存在是有原因的……
【解决方案3】:

感谢所有答案和 cmets。正如建议的那样,我找到了问题的根源并为此写了一个解决方法,包括打开一个问题。

window.RichFaces.ui.ExtendedDataTable.prototype.deActivateResizeListener = function() { 
   if (this.resizeEventName != undefined) { 
       $(window).off(this.resizeEventName); 
   } 
};

我接受了烘烤的答案,因为它确实有助于找到解决方法,并且如果有办法找出是否附加了事件处理程序,他的回答回答了我的问题。

【讨论】:

    猜你喜欢
    • 2016-12-05
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    • 2013-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    相关资源
    最近更新 更多