1

わかりましたので、コードのどの部分が例外を引き起こしているかをようやく突き止めました。ここで最初の投稿を読むことができます最初の投稿のコードには、実際に例外を引き起こしている部分 (viewPortDataオブザーバブルへの手動サブスクリプション) がありません。どうやら、私はどういうわけか間違っています...コードは次のとおりです。

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 を別のものでラップする必要があるため、要素を 1 つだけ jQuery に渡します。

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

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

この投稿と以前の投稿のコードを使用して フィドルを作成しましたが、正常に動作します。

<div>ただし、 .html の HTML に入力する単純なタグのみを返していますmetro-view-port <div>

私の推測では、返された HTML に問題があると思われます。

あなたへの私のアドバイスは、最初に返される HTML を非常に単純なものに減らすことによってこれを確認し、次に問題が見つかるまで意図したコードを徐々に再導入することです。

于 2012-08-26T23:36:49.263 に答える
2

fadeIn(400) を show() に切り替えます。

jQueryが計算を行う方が簡単です....内部の浮動小数点数が原因で、要素の計算されたスタイルを取得できないと思います。

私は同じ問題を抱えていました.....しかし、いくつかの調査の後、ここにたどり着き(DAMMET I LOST THE TAB-とにかくjQueryのバグレポートでした)、それを修正するために何をいじる必要があるかを認識しました。

私のコードでは、fadeIn() を show() に交換したので、アニメーションとは関係ありません。

アニメーションがなければ問題は発生しないと思っていたかもしれませんが、そうです。

slideDown(0 を試してみてください。まだアニメーションの後に残っている場合は、うまくいかないかもしれませんが、試してみる価値はあります。

于 2013-02-11T23:33:44.110 に答える
1

この jQuery バグによると、問題は 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 に答える
1

このバグは、古いバージョンの jQuery にありました。.hide() を .css('display', 'none') に変更してみてください

于 2012-10-15T10:50:20.990 に答える