1

好的,所以我终于弄清楚了我的代码的哪一部分导致了异常。你可以在这里阅读最初的帖子初始帖子中的代码缺少实际导致异常的部分(手动订阅viewPortDataobservable)。显然,我以某种方式做错了......这是代码:

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);
        }
    }
};

那么我哪里做错了?

4

5 回答 5

3

我也发生了同样的错误。问题是因为 HTML 有评论引起的。就像是:

<!-- Some Comment goes here -->
<div>
    ...
</div>

为了解决这个问题,在不更改 HTML 的情况下,您需要用其他东西包装 HTML,因此您只需将一个元素传递给 jQuery:

var div = document.createElement( 'div' );
div.innerHTML = nativeHtml;

var $html = $( div );
于 2013-06-19T16:24:41.300 回答
2

我使用您在这篇文章和上一篇文章中的代码创建了一个小提琴,它可以正常工作。

但是,我只返回一个简单的<div>标签来填充metro-view-port <div>.

我最好的猜测是您返回的 HTML 是问题所在。

我对您的建议是首先通过将返回的 HTML 简化为非常简单的内容来确认这一点,然后逐渐重新引入预期的代码,直到您发现问题。

于 2012-08-26T23:36:49.263 回答
2

将您的 fadeIn(400) 翻转为 show()。

jQuery 做数学运算更简单......我认为它无法获得元素的计算样式,因为它内部有一些浮点数或其他东西。

我遇到了同样的问题.....但是经过一些研究后,我到了这里(DAMMET 我丢失了选项卡-无论如何这是一个 jQuery 错误报告)并意识到需要解决什么问题才能修复它。

在我的代码中,我将 fadeIn() 换成了 show() 所以它与动画无关

您可能会认为如果没有动画,问题也不会普遍存在 - 但确实如此。

尝试 slideDown(0 如果您仍然在动画之后,它可能无法正常工作,但值得一试。

于 2013-02-11T23:33:44.110 回答
1

这个错误存在于旧版本的 jQuery 中。尝试将 .hide() 更改为 .css('display', 'none')

于 2012-10-15T10:50:20.990 回答
1

根据这个 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();

希望对某人有所帮助!

于 2013-07-23T21:39:45.607 回答