2010-01-22 3 views
0

У меня проблема в IE6/7, где они игнорируют привязку элементов в реальном времени. Кажется, я не могу найти решение этой проблемы, и мне действительно нужна поддержка как IE6, так и 7 (исправление должно в любом случае исправить другое). Первый щелчок моих элементов работает по назначению, но послесловие связывание исчезает, и я не могу заставить его работать. Этого не происходит в IE8 или других существующих браузерах.Проблема с явным вызовом jQuery с IE6/7

Вот мой код. Как вы можете видеть, в строке 5 я предупреждаю переменную hrefID. После первого щелчка hrefID ясно показывает мне, что привязка исчезает, когда он печатает href, который совершенно другой.

Может ли кто-нибудь помочь?

// 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

Вы должны использовать в прямом эфире()? Работает ли он, если вы замените live() на bind()? –

ответ

0

Я не уверен на 100%, если это проблема, но JSLint кричит о недостающей полуколонии. Старые IE намного меньше прощают, чем современные браузеры, поэтому я бы дал этот снимок первым. Я очень сомневаюсь, что проблема - это сама жизнь.

Это:

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

Должно быть:

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

REF: http://jslint.com/

Проблема в строке 36 символа 101: Отсутствует точка с запятой.

+0

Приятный улов, я пропустил эту точку с запятой, но это не помогло. –

0

Вы используете jquery-1.4? важные изменения в .live доступны только с jquery-1.4.

может быть, вы можете попробовать это, использовать event.target вместо 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; 
}); 
// 

 Смежные вопросы

  • Нет связанных вопросов^_^