好的,所以我终于弄清楚我的代码的哪一部分导致异常。您可以阅读初始帖子here.初始帖子中的代码缺少实际导致异常的部分(手动订阅viewPortData
observable)。显然,我在某种程度上做错了......这是代码:
self.viewPortData = ko.observable();
self.viewPortData.subscribe(function (newValue) {
var viewPort = $('#metro-view-port');
if (viewPort && newValue) {
self.fadeInOut(viewPort, newValue);
}
});
self.fadeInOut = function (domObject, newContent) {
if (newContent) {
var currentContent = domObject.html();
if (currentContent) {
var wrappedContent = $(currentContent);
wrappedContent.fadeOut(400, function () {
wrappedContent.empty();
domObject.html(newContent).hide().fadeIn(400);
});
} else {
domObject.html(newContent).hide().fadeIn(400);
}
}
};
那我哪里出错了?
答案 0 :(得分:3)
同样的错误发生在我身上。问题是由于HTML上有评论引起的。类似的东西:
<!-- Some Comment goes here -->
<div>
...
</div>
要解决这个问题,在不更改HTML的情况下,您需要使用其他内容包装HTML,因此您只将一个元素传递给jQuery:
var div = document.createElement( 'div' );
div.innerHTML = nativeHtml;
var $html = $( div );
答案 1 :(得分:2)
我使用您在此帖子和上一篇文章中的代码创建了fiddle,并且它可以正常工作。
但是,我只返回一个简单的<div>
标记来填充metro-view-port
<div>
的HTML。
我最好的猜测是你返回的HTML就是问题所在。
我的建议是首先通过减少返回到非常简单的HTML来确认这一点,然后逐步重新引入预期的代码,直到找到问题为止。
答案 2 :(得分:2)
将你的fadeIn(400)翻转为一个节目()。
jQuery更容易进行数学计算....我认为它不能得到元素的计算样式,因为它内部有一些浮点数。
我有同样的问题.....但经过一些研究我到了这里(DAMMET我失去了TAB - 无论如何都是一个jQuery错误报告)并且意识到需要解决它需要解决的问题。
在我的代码中,我将fadeIn()换成了show(),所以它与动画无关
你会想到,没有动画,这个问题也不会普遍存在 - 但事实确实如此。
尝试使用slideDown(如果您在动画之后仍然是0,那么它可能无法正常工作,但它值得流行。
答案 3 :(得分:1)
此错误发生在旧版本的jQuery中。尝试将.hide()更改为.css('display','none')
答案 4 :(得分:1)
根据this jQuery bug,问题可能与HTML中的换行符和空白文本节点有关。就我而言,我正在采用这样的模板:
<script id="myTemplate" type="text/template">
<div>
<h2>Important stuff</h2>
</div>
</script>
然后解析它:
var currentContent = $.parseHTML($('#myTemplate').html());
所以我最终得到了一堆文本节点,代表原始HTML模板中的换行符和空白字符。可能类似的情况发生在你身上。
为了解决这个问题,我删除了新行和空格,如下所示:
$('#myTemplate').html().replace(/\n/g, '').replace(/>\s+</g, '><').trim();
希望能帮助别人!