【问题标题】:$(document).ready() doesn't run after f:ajax rendering$(document).ready() 在 f:ajax 渲染后不运行
【发布时间】:2011-09-07 01:25:20
【问题描述】:

我有一些jQuery 代码在每个$(document).ready() 事件上运行。 我也有一些 <f:ajax> 标记可以重新呈现页面的某些部分。

我注意到当我重新渲染一个组件时,$(document).ready() 没有被调用。

有没有办法在每次<f:ajax> 重新渲染后运行 javascript 代码? (从技术上讲,我可以使用onevent 标签,但这对我来说是不利的解决方案,因为我必须在每个<f:ajax> 上调用该函数)

只是为了说明,这是 jQuery 代码:

$(document).ready(function() { ...CODE... }

还有JSF代码:

<f:ajax event="click" render=":someComponentID"/>

谢谢!

更新此问题可能与this one 重复。我正在调查。

更新2 使用 JSF Javascript 事件绑定很容易解决这个问题:

jsf.ajax.addOnEvent(function(data){
  if (data.status === 'success') {
    // Do stuff here
  }
}

在 JSF 2 参考下阅读更多信息

【问题讨论】:

    标签: jquery ajax jsf-2


    【解决方案1】:

    当 DOM 从初始加载完全加载时,$(document).ready() 事件会触发一次。

    ajax 事件可能会更改 DOM,但不会重新加载页面,因此 $(document).ready() 不会再次触发。

    我注意到 Google 在 Gmail 中解决此问题的方法是使用 a high frequency timer。

    【讨论】:

    • 有趣的文章!这可能是答案。我会等着看有没有更多的想法。
    • 转念一想,Timer 在这里可能不起作用。我需要知道事件发生的时间。
    【解决方案2】:

    使用事件和监听器..

    阅读Ajax tag events and listeners

    【讨论】:

    • 正如我在问题中所说的“我可以在技术上使用 onevent 标签,但这对我来说是不利的解决方案,因为我必须在每个 上调用该函数”。
    • 我链接到的帖子不使用onevent 属性,而是使用listener 属性。无论如何,jsf提供了一个回调模型(事件/监听器)..不知道你为什么不想使用它..你想要调用该函数每个f:ajax .. 对吗?
    • 是否可以使用h:outputScript 并使用ajax 调用的render 属性进行定位? (然后在那个脚本中做你想做的事..)
    猜你喜欢
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-20
    • 2014-04-20
    • 2012-07-28
    相关资源
    最近更新 更多