【问题标题】:How to run javascript after dynamic modal dialog is completely loaded动态模态对话框完全加载后如何运行javascript
【发布时间】:2016-06-26 21:01:46
【问题描述】:

我有一个模式对话框,当用户单击按钮时会打开。它必须是动态的。它有很多来自外部来源的图像,例如<img src="http://example.com/image.jpg">。打开此模式后,我想对所有加载的图像的高度求和。所以我打电话给imageCalculation()onShow

    <p:dialog 
        id="myDialog" 
        widgetVar="myDialogWV" 
        modal="true"  
        dynamic="true"
        onShow="imageCalculation(); ">

        <ui:include src="/somePage.xhtml"  />

    </p:dialog>

<script type="text/javascript">
    function imageCalculation(){
        var total = 0;
        $.each($('#form\\:myDialog').find('img'), function(k,v){
            total += v.naturalHeight;
        });
        alert(total);
    }
</script>

问题是在调用imageCalculation()的那一刻,图片还没有从外部加载,naturalHeight还是0。

有没有办法在所有对话框内容完全加载后运行 javascript?

编辑somePage.xhtml 的内容由从 DB 获取 HTML 代码片段的 p:dataGrid 填充。其中一些代码是&lt;img...所以理论上我无法更改它们

谢谢

【问题讨论】:

  • 由于图像加载是异步的,您必须将加载事件处理程序绑定到每个处理程序并跟踪它们何时全部加载。应该在这里找到很多类似的帖子来帮助
  • 谢谢我找到了一个解决方案会发布它

标签: javascript jsf primefaces


【解决方案1】:

我找到了一个可以帮助我的插件:waitForImages jQuery plugin

$('selector').waitForImages(function() {
    alert('All images are loaded.');
});

【讨论】:

  • 那是不是太容易了!
  • 真正的伟大!!
【解决方案2】:

我不确定,但您可以尝试为所有图片添加onload 属性。
像这样:

<script>
function loadHandler(x) {
     console.log(x+" element loaded!");
}
</script>
<img src="img1.png" onload="loadHandler('1 image')">
<img src="img2.png" onload="loadHandler('2 image')">
//etc...

然后就可以统计loadHandler()中的加载图片和已经加载的图片了

【讨论】:

  • 谢谢,但我无法更改这些图像代码...还有其他方法吗?
  • 这仍然很棘手,因为您没有要完成的跟踪。使用内联事件处理程序并不像在循环中创建的外部事件处理程序那么容易
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-09
  • 2011-04-11
  • 1970-01-01
  • 2016-10-11
  • 1970-01-01
  • 2014-06-06
相关资源
最近更新 更多