2012-08-26 56 views
1

好吧,我終於弄清楚我的代碼的哪個部分導致異常。您可以閱讀初始文章here.初始文章中的代碼缺少實際引起異常的部分(手動訂閱viewPortData可觀測)。顯然,我做錯了某種方式...這裏是代碼:NS_ERROR_XPC_BAD_CONVERT_JS:無法轉換JavaScript參數arg 0 [nsIDOMWindow.getComputedStyle](Followup)

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

那麼我哪裏出錯了?

回答

2

我創建了一個fiddle使用您的代碼從這篇文章和以前的帖子,它的工作原理應該如此。

但是,我只返回一個簡單的<div>標記來填充metro-view-port<div>的HTML。

我最好的猜測是你回來的HTML是問題。

我給你的建議是首先通過減少HTML返回到一個非常簡單的東西來確認,然後逐漸重新引入預期的代碼,直到你發現問題。

1

這個錯誤是在舊版本的jQuery。嘗試將.hide()更改爲.css('display','none')

2

將您的fadeIn(400)翻轉到show()。

jQuery更簡單的做數學....我認爲它不能得到元素的計算風格,因爲它裏面的浮點數或某些東西。

我有同樣的問題.....但經過一些研究後,我到了這裏(DAMMET我失去了選項卡 - 這是一個jQuery的錯誤報告),並意識到需要修復它。

在我的代碼我換出淡入()來顯示(),所以它不與動畫做

你會想到,如果沒有動畫的問題不會是普遍的兩種 - 但它是。

嘗試了slideDown(0,如果你仍然是一個動畫後,可能無法正常工作,但它的價值彈出。

3

發生在我身上的同樣的錯誤。因爲HTML對其有意見的問題引起的。喜歡的東西:

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

爲了解決這個問題,在不改變HTML,你需要用別的東西的HTML,所以你只有一個元素傳遞給jQuery的:

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

var $html = $(div); 
+0

證實 - 當我從要附加的代碼中移除html註釋時,錯誤消失了。 – zergussino

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

希望幫助別人!

相關問題