【问题标题】:Javascript: Select window onload functionJavascript:选择窗口加载功能
【发布时间】:2013-11-04 20:25:41
【问题描述】:

我继承的遗留 html 有许多类型的 js 调用

Event.observe(window, 'load', function() {
    // Various snippets of code 
});

我希望能够根据用户与页面的交互在页面已经加载之后触发所有链接到窗口加载事件的函数。理想情况下,我会做类似的事情

window_on_load_function = window.someCommandHere();
window_on_load_function();

有没有办法做到这一点?我可以使用 JQuery,但也可以使用没有 JQuery 的解决方案。

【问题讨论】:

  • Event.observe 在我看来像 Prototype.js,你在用吗?
  • 是的,Prototype.js 是构建遗留系统的 javascript 框架
  • 所以一些答案和资源链接 - 对于触发本地事件 Event.simulate 将是一个很好的附加组件 - github.com/kangax/protolicious/blob/… - 要获得所有事件观察者,我会为你指出一个我以前的答案 - stackoverflow.com/a/17978728/341491

标签: javascript prototypejs dom-events


【解决方案1】:

我可能误解了你的问题。您不能将函数调用绑定到您所指的特定用户交互吗?

IE:如果交互是他们单击按钮,则将其绑定到该元素的 onclick。 在 jQuery 中是

$('#ELEMENTID').click(window_on_load_function);

【讨论】:

  • 理论上是的,我可以做到这一点。我想我的问题是,我将如何获得 window_on_load_function 值?
  • 抱歉,误会了。现在我想我明白你的问题了。这个答案可能会对你有所帮助。如果原型以不同方式处理窗口对象,则可能会失败。我不喜欢原型,所以我不能肯定地说,但值得一试。 stackoverflow.com/questions/1422696/…
  • 我也不喜欢原型,但它是旧代码使用的:/
  • 您是否尝试在我发布的链接中实施解决方案? stackoverflow.com/questions/1422696/… 它遍历 Prototype 元素的侦听器,以便您调用它们。在他的示例答案中,他发出了警报,但您可以看到如何重新计算它以执行该功能。
【解决方案2】:

你需要找到你的window对象存储的responders,它是由prototype.js通过以下方式分配的(参见prototype.js 1.7,event.js line 774):

function observeStandardEvent(element, eventName, responder) {
    var actualEventName = getDOMEventName(eventName);
    if (element.addEventListener) {
      element.addEventListener(actualEventName, responder, false);
    } else {
      element.attachEvent('on' + actualEventName, responder);
    }
}

因此prototype.js 不会将您的responders 存储在某个变量上,而只是将它们分配给您的element——在本例中为window

可悲的是,prototype.js 没有 jQuerys click 这样的东西(正如 isick 所建议的那样)。但是还有很多其他的解决方案,你应该看看相关的问题“Trigger an event with Prototype”。

尤其是在 Gregs 的回答中。 使用他的Element.triggerEvent(window, 'load') 应该可以完成这项工作。 另一个(可能更干净)的解决方案是使用 Prototypes Event.fire
无论是 Gregs 的回答还是显而易见的 Event.fire 都无法在 window 上完成这项工作!

但是 balupton 针对他的问题 Binding and triggering native and custom events in Prototype 提供了一个自定义构建的解决方案,他发布了一个 gist 似乎运行良好!

我做了一个(脏)jsfiddle,这证明了它的可能性。不过,这只是一个开始。

【讨论】:

  • 是的,我无法获取 Event.fire(window, 'load');工作,尽管这绝对是我正在寻找的东西。至于您的原始解决方案,我没有构成响应者值的函数,因此除非我能够访问响应者应该具有的值,否则这种方法不会真正起作用
  • 我看到 fire() 只能用于自定义事件,我认为 load 是本机事件,因此无法使用。我看到该页面上有一个指向 github 的链接,但尚未尝试过该解决方案
猜你喜欢
  • 1970-01-01
  • 2021-10-18
  • 1970-01-01
  • 1970-01-01
  • 2011-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多