我在移动网站上运行了一些jQuery,它可以进行一些布局计算并调整一些元素的大小。
这在我们支持的浏览器上运行良好 - 甚至是诺基亚 - 但我接到报告称诺基亚存在问题。
然后我意识到我的E72系统软件去年年底最后一次更新,所以继续下载最新版本。而且,现在错误就在那里。
在完成向函数添加警报的常规JS调试过程之后,我发现如果我在执行所有布局计算和调整大小的函数中触发警报,那么它可以工作!如果我省略警报,则没有任何反应。
过去我偶尔会在IE中遇到类似的情况,无论出于什么原因,IE都需要让JS“暂停”才能赶上。通常的技巧是在setTimeout
设置为0时使用包含我遇到问题的函数。
我在诺基亚试过这个,但没有运气。然后我尝试了1秒,10秒,但仍然没有运气。只有警报才能让它发挥作用。
关于这一个的任何理论? JS警报在计时JS功能方面是否有某些东西可以通过警报或setTimeout
以外的其他东西进行复制?
更新:
每个请求,示例代码。这是在文档就绪时触发的函数内部。
var extraWidths = $icon.width() + $button.width() + 20 + 5;
var containerWidth = $panel.width();
var percentWidth = 100 - ( Math.floor((extraWidths/containerWidth)*100) );
$searchInput.css('width',percentWidth+'%');
alert('hello world'); // if I add this, Nokia works correctly.
我正在做的是在文档渲染之后,我正在计算一些元素的宽度,从父容器的总宽度中减去它,然后调整其中的输入字段以占用剩余空间(设置为百分比宽度)。
这在Webkit,Firefox,BlackBerry(OS5和OS6)中运行良好,所以我认为这不是代码错误,但希望有人遇到过一种解决方法(除警报外)。
更新2:
经过更多的研究,我有了一个新的理论:诺基亚网络浏览器没有正确地告诉jQuery该文档准备就绪。
我发现包装需要计算DOM元素维度的jQuery只有在我将它包装在setTimeout中时才有效。而且这不是一个任意的时间延迟......我需要确保时间延迟比浏览器正确渲染DOM所花费的时间长。由于我不可能知道给定的设备速度和网络速度,我必须坚持1-2秒的时间,这不会削减它。
所以,我的新问题:是否有人知道jQuery的document ready
有任何问题,而且它在诺基亚设备上无法正常工作?如果是这样,那么我们需要重新考虑使用jQuery。
答案 0 :(得分:1)
而不是$(document).ready(function()
为您的身体添加ID,并使用$(document.getElementById('bourbodyid')).ready(function()
。
解决方法可能没有其他问题那么错误。