2010-01-22 8 views
0

J'ai un problème dans IE6/7 où ils ignorent la liaison en direct des éléments. Je n'arrive pas à trouver de solutions à ce problème, et j'ai vraiment besoin d'IE6 et de 7 support (la réparation devrait régler l'autre). Le premier clic de mes éléments fonctionne comme prévu, mais après la liaison disparaît et je ne peux pas le faire fonctionner. Cela ne se produit pas dans IE8 ou tout autre navigateur actuel.Problème de liaison de clic direct jQuery avec IE6/7

Voici mon code. Comme vous pouvez le voir, à la ligne 5, j'affiche la variable hrefID. Après le premier clic, hrefID montre clairement que la liaison disparaît car elle imprime un href totalement différent.

Quelqu'un peut-il aider?

// AJAX Page Changing 
$("#mContainer a:lt(6),#home a").live("click", function(){ 
    var clickID = 0; 
    var hrefID = $(this).attr("href"); 
    alert(hrefID); 
    switch(hrefID){ 
     case 'home': 
      clickID = 0; 
      break; 
     case 'portfolio': 
      clickID = 1; 
      break; 
     case 'resume': 
      clickID = 2; 
      break; 
     case 'about': 
      clickID = 3; 
      break; 
     case 'contact': 
      clickID = 4; 
      break; 
     case 'tutorials': 
      clickID = 5; 
      break; 
    } 
    $.ajax({ 
     type: 'POST', 
     url: "/includes/pages/"+hrefID+".php", 
     data: "ajaxtab=1", 
     cache: false, 
     success: function(code){ 
      // Change Tab Image 
      var expireDate = new Date(new Date().getTime()+86400000*5); //5 Days 
      document.cookie = "soluml="+hrefID+";expires="+expireDate.toGMTString(); 
      $("#body").fadeTo("fast", 0, function(){$("#body").html(code);}); 
      $("#body").fadeTo("fast", 1); 
      $.post("/includes/topnav.php",{ajaxtab:clickID},function(data){$("#mContainer").html(data)}); 
     }, 
     error: function(){ 
      return true; 
     } 
    }); 
    return false; 
}); 
// 
+0

Avez-vous utiliser en direct()? Cela fonctionne-t-il si vous remplacez live() par bind()? –

Répondre

0

Je ne suis pas sûr à 100% si c'est le problème, mais JSLint crie à propos d'un point-virgule manquant. Les IE plus anciens pardonnent beaucoup moins que les navigateurs modernes, donc je donnerais ça en premier. Je doute fortement que le problème soit de vivre lui-même.

Ce:

$.post("/includes/topnav.php",{ajaxtab:clickID},function(data){$("#mContainer").html(data)}); 

devrait être:

$.post("/includes/topnav.php",{ajaxtab:clickID},function(data){$("#mContainer").html(data);}); 

REF: http://jslint.com/

problème à la ligne 36 caractères 101: virgule manquant.

+0

Belle prise, j'ai raté ce point-virgule mais ça n'a pas marché. –

0

Utilisez-vous jquery-1.4? changement important à .live sont disponibles uniquement depuis jquery-1.4.

peut-être vous pouvez essayer cela, il utilise event.target au lieu de this:

// AJAX Page Changing 
$("#mContainer a:lt(6),#home a").live("click", function(e){ 
    var clickID = 0; 
    var hrefID = $(e.target).attr("href"); 
    alert(hrefID); 
    switch(hrefID){ 
     case 'home': 
      clickID = 0; 
      break; 
     case 'portfolio': 
      clickID = 1; 
      break; 
     case 'resume': 
      clickID = 2; 
      break; 
     case 'about': 
      clickID = 3; 
      break; 
     case 'contact': 
      clickID = 4; 
      break; 
     case 'tutorials': 
      clickID = 5; 
      break; 
    } 
    $.ajax({ 
     type: 'POST', 
     url: "/includes/pages/"+hrefID+".php", 
     data: "ajaxtab=1", 
     cache: false, 
     success: function(code){ 
      // Change Tab Image 
      var expireDate = new Date(new Date().getTime()+86400000*5); //5 Days 
      document.cookie = "soluml="+hrefID+";expires="+expireDate.toGMTString(); 
      $("#body").fadeTo("fast", 0, function(){$("#body").html(code);}); 
      $("#body").fadeTo("fast", 1); 
      $.post("/includes/topnav.php",{ajaxtab:clickID},function(data){$("#mContainer").html(data)}); 
     }, 
     error: function(){ 
      return true; 
     } 
    }); 
    return false; 
}); 
//