1

我正在使用非常标准的“单页”模型进行 JQueryMobile 开发,例如:

<div id="page1" data-role="page">Lorem Ipsum</div>
<div id="page2" data-role="page">
    <div id="mycontent" data-role="content"></div>
</div>

当我单击链接以从 page1 导航到 page2 时,我将内容附加到 $("#mycontent") 包含并不总是具有指定宽度/高度的图像,然后我正在应用 iScroll-4 以便我可以滚动/缩放内容 - 在某些情况下,我需要在加载后立即缩放它,以便它很好地适合移动屏幕(通常为 600 像素宽开始)。问题是,一旦图像加载,格式就会崩溃,特别是因为我需要重新定位元素,因为 CSS 缩放喜欢将缩放的项目居中,而不是对齐到上/左角。

对于一个简单的问题,这可能是一个很长的解释(也许有更好的方法来解决上述问题?),但这是我真正的问题:我正在尝试为 div 上的加载事件添加一个事件侦听器,以便加载完所有图像后,我可以检查是否需要重新定位 div:

$("#mycontent").addEventListener('load', doSomething(), false);

function doSomething(){  alert("something");  }

疯狂的是,doSomething()确实被解雇了,但随后 Safari 抛出以下错误并使 JQuery 崩溃:

TypeError: 'undefined' 不是函数(评估 '$("#mycontent").addEventListener('load', doSomething(), false)')

该元素存在于 DOM 中,并且肯定是在添加事件侦听器时加载的 - 我想这可以通过它触发的事实来说明。JQM 在元素转换时将一些样式应用于元素,但我不知道这会如何影响它。

任何帮助将不胜感激,因为我已经为此苦苦挣扎了一段时间,并且即将编写一些非常丑陋的循环黑客来检查大小变化:/

4

2 回答 2

0

您收到错误的原因是您正在使用 JQuery 并尝试绕过 JQuery API 添加事件。您不能使用 addEventListener 方法。改用$('#mycontent').load(handler),其中 handler 是一个接受参数的函数。例如$('#mycontent').load(function (e) {alert ("loaded")})

于 2012-03-29T18:00:43.777 回答
0

有两个可能的问题。addEventListener 的第二个参数应该是一个函数,而不是函数调用:element.addEventListener("load", doSomething, false);。在您的代码中,doSomething()无论事件名称是什么,都会执行。

此外,$('#mycontent')返回我认为会导致您的 TypeError 的元素数组,因此您可能想要使用:

var mycontent = document.getElementById('mycontent');
mycontent.addEventListener("load", doSomething, false);

如果您监听每个图像的加载事件并调整布局, JQuery 也有可能工作的load() :

$('#mycontent img').load(doSomething);

这将为每个图像触发一次,因此如果您知道图像的数量,您可能想要保持计数,或者在每次加载时创建/重置超时,并在超时后调用 doSomething。

于 2012-03-12T08:24:43.563 回答