2013-07-01 4 views
1

Internet Explorer objet erreur attendue LINE: 64Internet Explorer erreur Objet attendu

Le code fonctionne dans Firefox et Chrome.

Je continue d'obtenir une erreur attendue d'un objet Internet Explorer. J'ai enlevé le code affecté et il continue juste jusqu'à ce que n'importe quel code après que la ligne 64 ait disparu.

Le problème commence à la ligne 64 qui est le code ci-dessous:

CODE affligée:

$(document).ready(function() { 
    preload(preloadi); 
}); 

ALL CODE JQUERY:

 <script type="text/javascript" src="http://code.jquery.com/jquery-1.8.3.min.js"></script>   
     <script type="text/javascript"> 

/* -------------------------------- Preload images function for speed*/ 

    function preload(arrayOfImages) { 
     $('body').addClass("loading"); 
     $(arrayOfImages).each(function() { 
      $('<img/>')[0].src = this; 
     }); 
     $('body').removeClass("loading"); 
    } 

/* -------------------------------- Generic functionality function */ 

    function transformImage(classCSS, original, link, backArray, count, prevClass) { 
     var back = '<div id="back"><div id="_' + backArray[backArray.length-1] + '"></div></div><div class="_0"></div><div class="_1"></div><div class="_4"></div><a id="contact" href="mailto:[email protected]"></a><a id="rightlink" target="_blank" href="http://www.casa.gov.au/scripts/nc.dll?WCMS:STANDARD::pc=PC_101078"></a>'; 

     link[prevClass] = window.original; 
     window.original = link[classCSS]; 

     if (classCSS != '0') { link[classCSS] += back; } 

     $('.inter').fadeTo(250, 0.25, function() { 

      $('.inter').html(link[classCSS]); 


      $('.inter').css({ 
       'background-image': 'url("' + classCSS + '.png")' 
      }); 
      $('.inter').fadeTo(250, 1.00); 
     }); 
    } 

/* -------------------------------- Variables */ 
    var preloadi = [ 
     '1.png', 
     '2.png' 
     ]; 
    var backArray = []; 
    var prevClass = '0'; 
    var classCSS = '0'; 
    var count = 0; 
    original = '<div class="_2"></div><div class="_3"></div>'; 
    var link = [ 
    '<div class="_2"></div><div class="_3"></div>', 
    'a', 
    'b', 
    'c', 
    'd' 
    ]; 

/* -------------------------------- Event handlers */ 

    $(document).ready(function() { 
     preload(preloadi); 
    }); 

    $(document).on('mouseenter mouseleave', '.inter [class]', function (event) { 
     $('.' + this.classCSS + 't').toggle(event.type === 'mouseenter'); 
    }); 

    $(document).on('change', '#selectContainer [id]', function() { 
    backArray[count] = classCSS; 
    count += 1; 
    prevClass = classCSS; 

    classCSS = $("select").val(); 
    transformImage(classCSS, original, link, backArray, count, prevClass); 
    }) 

    $(document).on('click', '.inter [class], .inter #back [id]', function() { 

    if (this.id) { 
    count -= 1; 
    backArray.pop(count); 
    } else { 
    backArray.push(classCSS); 
    count += 1; 
    } 

    prevClass = classCSS; 
    classCSS = (this.id || this.className).substr(1); 
    transformImage(classCSS, original, link, backArray, count, prevClass); 
    }) 

    </script> 
+1

Certains de vos sélecteurs sont hors du commun. Qu'est-ce que "#selectContainer [id]"? La partie '[id]' sélectionne les éléments avec un attribut 'id'. Est-ce l'idée que vous sélectionnez tous les éléments enfants de '# selectContainer' qui ont des attributs' id'? Question similaire pour ''.inter [class], .inter #back [id]'': Sommes-nous en train de sélectionner tous les enfants de '.inter' qui ont des attributs' class', ainsi que tous les enfants de '.inter # back' qui avoir des attributs 'id'? De quoi s'agit-il? –

Répondre

2

Votre gestionnaire de documents prêts est trop court. Par conséquent, tout ce qui est en dessous s'exécute avant que le DOM ne soit prêt.

Déplacez la fermeture }); en dessous de tout le code de votre gestionnaire d'événements et cela devrait fonctionner, sous réserve de toute autre erreur de codage.

Ce que vous devriez retrouver avec:

$(document).ready(function() { 
    preload(preloadi); 

    $(document).on('mouseenter mouseleave', '.inter [class]', function (event) { 
    $('.' + this.classCSS + 't').toggle(event.type === 'mouseenter'); 
}); 

// more initialisation code... 

}); // end of $(document).ready() 

// No more code here. 
+0

J'ai déplacé la fonction prête en dessous du code du gestionnaire d'événements. L'erreur IE va juste à la ligne suivante. Qui est: "$ (document) .on ('mouseenter mouseleave', '.inter [classe]', fonction (événement) { $ ('.' + This.classCSS + 't'). Toggle (event.type === 'mouseenter'); }); " – sephiith

+0

Avez-vous déplacé toute la fonction ou juste les crochets de fermeture? Vous devez placer vos gestionnaires d'événements dans la fonction prête. Si vous ne le faites pas, IE essaiera de les exécuter trop tôt. –

+0

Je l'ai fait, l'erreur est restée plus quelques erreurs attendues d'objet plus. Est-ce que $ (document) .on n'attend pas que le dom soit prêt? Ou cela ne fonctionne-t-il pas dans IE? – sephiith