2016-06-17 6 views
0

私は、jQuery、ブートストラップ、および2種類のjQueryプラグインを使用してWebページを作成しています。 1つはTurn.jsと呼ばれ、もう1つはmCustomScrollbarと呼ばれます。今日までは、すべてのリクエストに<!DOCTYPE html>タグの前にスクリプトタグを付加するサーバーサイドコードがありました。別のページで、$(window).height()を使用しているときにjQueryが不適切な高さで問題を引き起こしていたことに気が付いたので、コードを修正して、</body>タグの直前にスクリプトタグを入れる方法を考え出しました。これは私が使用しているmCustomScrollBarライブラリの機能を壊していますなぜ私のjは不適切なhtmlで異なって実行されますか?

何らかの理由でスクロールバーが表示されず、マウスホイールの機能が無効になり、モバイル/タッチデバイスでスクロールが無効になります。プラグインは、htmlがプラグインによって変更されるのを見ることができるので、確実に発砲しています。

JavaScriptが正しく動作する理由、または不適切なhtmlがあるのに、マークアップが修正されたとき正しく動作しない(少なくとも<!DOCTYPE html>タグの前にはテキストなし) ?

関連するコード:

HTML構造IはにmCustomScrollbarプラグインを適用しています。 #flip-indesの親は、ページのメインコンテナであるブートストラップ.container-fluidを分割します。私は私の意見に剃刀構文でC#を使用しています。必要に応じて、生成されたhtmlのページを投稿できます。

<div id="flip-index"> 
    <div class="customScrollbar"> 
     @for (var i = 0; i < Model.Pages.Count; ++i) 
     { 
      <div class="index-item" onclick="$('#flipbook').turn('page', @(i + 1));"> 
       <img src="@Config.Get("FlipbookImgURL")@Model.Pages[i].Replace('\\', '/')" alt="Flipbook index preview" onerror="replaceWithText(event);"/> 
       <a class="btn btn-primary full-size-img" href="/FlipBook/[email protected]("FlipbookImgURL")@Model.Pages[i].Replace('\\', '/')" target="_blank" title="View Image Full Size"> 
        <span class="glyphicon glyphicon-eye-open"></span> 
       </a> 
       <div class="index-number">@(i + 1)</div> 
      </div> 
     } 
     <div class="index-pad">&nbsp;</div> 
    </div> 
</div> 

マイ$(document).ready()

try 
{ 
    $('.index-item:first-child').addClass('active'); 
    var turnOptions = {}; 
    var width = screenWidth(); 
    $('.main-content').css('padding-top', $('nav.navbar').outerHeight()) 
    $('#flipbook').turn(turnOptions); 
    var firstImage = $('#flipbook img')[0]; 
    if (firstImage.complete || firstImage.naturalHeight > 0) { 
     sizeElements(); 
    } else { 
     firstImage.onload = sizeElements; 
    } 
    $('.customScrollbar').mCustomScrollbar({ 
     theme: 'minimal-light', 
     axis: 'y', 
     mouseWheel: { 
      scrollAmount: ($('#flip-index').outerHeight() * (1/$('.index-item').length)) * 2 
     } 
    }); 

    $('#flip-index').css({ 
     left: parseInt($('.main-content').css('padding-left')) 
    }); 

    // Keep the sidebar and the flipper in sync. 
    $('#flipbook').on('turning', pageTurning); 
    window.addEventListener('resize', windowResize); 

    $('#otherInserts .active, #otherInserts .disabled').on('click', function (e) { 
     e.preventDefault(); 
     e.stopImmediatePropagation(); 
    }); 
} 
catch(ex) 
{ 
    alert('There was an error loading this page!'); 
    throw ex; 
} 
finally 
{ 
    // remove loading overlay 
    $('.loading-overlay').fadeOut(function() { 
     $('.loading-overlay').remove(); 
    }); 
} 

あり、私はこのページに持って全体の多くのjsがあるが、それのどれもmCustomScrollbarプラグインを参照していないので、「私はそれが関連するとは思わなかった、と私はドン不必要な情報を誰にも過負荷にしたくない。誰かがもっとコードを投稿したいのなら、私はそれをしてうれしいです、ちょうだく聞いてください。

答えは、ブラウザがHTMLを検証できるかどうかに基づいて、ブラウザが私のjsまたはhtmlマークアップを解釈する方法のどこかにあると考えています。

答えて

1

へようこそ:癖MODE

doctype、またはその欠如によっては、ブラウザが標準モードまたはQuirksモードのいずれかを使用することができます。 Quirksモードは古代のブラウザの機能を複製し、その最高の回避方法です。

コンテンツの前にdoctypeタグがレンダリングされているため、ブラウザは互換性があるとみなします。

は、2つのモードの違いLOTありますが、これは得るかもしれないあなたが開始しました:

https://developer.mozilla.org/en-US/docs/Quirks_Mode_and_Standards_Mode

と同様に、この優しいチャート:

http://www.quirksmode.org/css/quirksmode.html

勧告:クォークモードは絶対に避けてください。破損したコードがあなたに悪いHTMLを与えているものを修正してください。

+0

私はQuirksモードがIEのためだけであると思った。どちらにかかわらず、私の問題は、コードがQuirksモードで動作するが、標準では機能しないことです。私は理由を理解できません!私のHTMLは正解ですが、私は多くの異なるバリデーターを通してそれを実行しました。 –

+0

私の質問に対する通常の答えに従って、私は何かばかげたことをしていました。この場合、間違った要素のmCustomScrollBar関数を呼び出していました。私はquirksモードでこれはうまくいきましたが、標準モードではないと思います。 –

関連する問題