NS_ERROR_XPC_BAD_CONVERT_JS:无法转换JavaScript参数arg 0 [nsIDOMWindow.getComputedStyle](后续)

时间:2012-08-26 17:46:16

标签: javascript jquery data-binding knockout.js observable

好的,所以我终于弄清楚我的代码的哪一部分导致异常。您可以阅读初始帖子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);
        }
    }
};

那我哪里出错了?

5 个答案:

答案 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();

希望能帮助别人!