2013-04-11 2 views
0

Он, там, я пробовал часы без подсказки (я использую Wordpress), очень сложно понять, что не так с jQuery. FF и Chrome в Windows/Mac работают нормально, IE сводит меня с ума.Почему мой jQuery не работает над IE (отлично работает в Safari, Chrome и FF)?

Я использую в заголовке:

<!DOCTYPE html> 

Это веб, где я делаю тест:

http://newportal.no-ip.org/

Это мой JS код:

 jQuery(document).ready(function() { 

//Menu 
    jQuery("ul.menu").superfish({ 
      delay  : 100, 
      animation : {opacity:'show',height:'show'}, 
      //speed  : 10, 
      autoArrows : true, 
      dropShadows : false 
     }); 

//Popup FancyBox 
jQuery('.fancybox-media').fancybox({ 
     maxWidth : 800, 
     maxHeight : 600, 
     fitToView : false, 
     width  : '70%', 
     height  : '70%', 
     autoSize : false, 
     closeClick : false, 
     openEffect : 'none', 
     closeEffect : 'none' 
    }); 

jQuery('.fancybox').fancybox(); 

    var thumbnails = 'a:has(img)[hrefjQuery=".jpg"]'; 
    jQuery(thumbnails).addClass("fancybox").attr("rel","fancybox"); 


jQuery(".popup").fancybox({ 
     'width' : '75%', 
     'height' : '75%', 
     'autoScale' : false, 
     'transitionIn' : 'none', 
     'transitionOut' : 'none', 
     'type' : 'iframe' 
    }); 

//Expand 
jQuery('div.moexpander').hide(); 
    jQuery('a.moexpander').click(function(){ 
     jQuery(this).parent().next('div.moexpander').slideToggle(); 
     return false; 
    }); 

//Slideshow Destacados, Create an array of titles 
    var titles = jQuery('#cycle div.item').find("h3").map(function() { return jQuery(this).text(); }); 
    //Add an unordered list to contain the navigation 
    //Invoke the cycle plugin on #cycle 
    jQuery('#cycle').before('<ul id="pager" class="sprites bannerBg"></ul>').cycle({ 
     //Specify options 
     fx  :'fade', //Name of transition effect 
     speed : 600, 
     delay : -1200, 
     pause : 1, 
     pager : '#pager',  //Selector for element to use as pager container 
     pagerAnchorBuilder: function (index) {    //Build the pager 
     return '<li><a href="#">' + titles[index] + '</a></li>'; 
    }, 
    updateActivePagerLink: function(pager, currSlideIndex) { 
     jQuery(pager).find('li').removeClass('active').filter('li:eq('+currSlideIndex+')').addClass('active'); 
    } 
    }); 
    jQuery('#cycle').hover(function() { 
    jQuery('.pause').show(); 
    }, function() { 
     jQuery('.pause').hide(); 
    }); 


//Slideshow Voluntariado 
    jQuery('#cyclePopular').after('<div id="navPopular">') 
     .cycle({ 
    fx   : 'scrollHorz', 
    speed  : 'fast', 
    delay : -1200, 
    pause : 1, 
    pager  : '#navPopular' 
    }); 

//Slideshow Avisos 
    jQuery('#cycleAvisos').cycle({ 
    fx   : 'scrollHorz', 
    delay : -4000, 
    pause : 1, 
    prev: '#prev', 
    next: '#next', 
    pager  : '#navAvisos', 
    after: onAfter 
    }); 
//Make Avisos's Height auto-resizing  
    function onAfter(curr, next, opts, fwd) { 
     var jQueryht = jQuery(this).height(); 

     //set the container's height to that of the current slide 
     jQuery(this).parent().animate({height: jQueryht}); 
    } 

//Make all the block clickable 
jQuery("#link").click(function(){ 
    window.location=jQuery(this).find("a").attr("href"); 
    return false; 
});   

//Add CSS to Sidebar Pages 
jQuery('#sidebar-pages').find("li").before("<span class='sprites bulletR left'></span>"); 



// Tabs 
jQuery.fn.easytabs = function(){ 
//Default Action 
jQuery(this).find(".easytabs_content").hide(); //Hide all content 
jQuery(this).find("ul.easytabs li:first").addClass("active").show(); //Activate first tab 
jQuery(this).find(".easytabs_content:first").show(); //Show first tab content 
jQuery(this).find(".easytabs_content li a").before("<span class='sprites bulletR'></span>"); //Show bullets 

//On Click Event 
jQuery("ul.easytabs li").click(function() { 
jQuery(this).parent().parent().find("ul.easytabs li").removeClass("active"); //Remove any "active" class 
jQuery(this).addClass("active"); //Add "active" class to selected tab 
jQuery(this).parent().parent().find(".easytabs_content").hide(); //Hide all tab content 
var activeTab = jQuery(this).find("a").attr("href"); //Find the rel attribute value to identify the active tab + content 
jQuery(activeTab).fadeIn(); //Fade in the active content 
return false; 
}); 
};//end function 

jQuery("div[class^='easytabs']").easytabs(); //Run function on any div with class name of "easytabs" 

// Search animation with IE statements 
    var input = jQuery('input#s'); 
    var divInput = jQuery('div.input'); 
    var width = divInput.width(); 
    var outerWidth = divInput.parent().width() - (divInput.outerWidth() - width) - 28; 
    var submit = jQuery('#searchSubmit'); 
    var txt = input.val(); 

    input.bind('focus', function() { 
     if(input.val() === txt) { 
      input.val(''); 
     } 
     jQuery(this).animate({color: '#000'}, 300); // text color 
     jQuery(this).parent().animate({ 
      width: outerWidth + 'px', 
      backgroundColor: '#fff', // background color 
      paddingRight: '43px' 
     }, 300, function() { 
      if(!(input.val() === '' || input.val() === txt)) { 
       if(!(jQuery.browser.msie && jQuery.browser.version < 9)) { 
        submit.fadeIn(300); 
       } else { 
        submit.css({display: 'block'}); 
       } 
      } 
     }).addClass('focus'); 
    }).bind('blur', function() { 
     jQuery(this).animate({color: '#b4bdc4'}, 300); // text color 
     jQuery(this).parent().animate({ 
      width: width + 'px', 
      backgroundColor: '#e8edf1', // background color 
      paddingRight: '15px' 
     }, 300, function() { 
      if(input.val() === '') { 
       input.val(txt) 
      } 
     }).removeClass('focus'); 
     if(!(jQuery.browser.msie && jQuery.browser.version < 9)) { 
      submit.fadeOut(100); 
     } else { 
      submit.css({display: 'none'}); 
     } 
    }).keyup(function() { 
     if(input.val() === '') { 
      if(!(jQuery.browser.msie && jQuery.browser.version < 9)) { 
       submit.fadeOut(300); 
      } else { 
       submit.css({display: 'none'}); 
      } 
     } else { 
      if(!(jQuery.browser.msie && jQuery.browser.version < 9)) { 
       submit.fadeIn(300); 
      } else { 
       submit.css({display: 'block'}); 
      } 
     } 
    }); 

}); 

Я по-настоящему благодарю вашу помощь,

Н ·

+3

Вы проверили консоль? Вы получаете ошибки? Что именно не работает? – Dom

+1

Какая функция не работает? Все они? – TiagoBrenck

+4

Какая версия jQuery? Какая версия IE? – doublesharp

ответ

1

Я вижу два вызовы методов, которые хорошо не поддерживаются (или поддерживаемые на всех) с помощью IE:

  • .hover
  • .slideToggle

Все из toggle функций имеют грубую/непоследовательную кросс-браузерную поддержку. Я бы попытался изменить это, тем более, что эффекты slide действительно имеют некоторые из самых высоких издержек всех эффектов jQuery, и это явно проявляется в медленных браузерах (например, IE - особенно в старых версиях).

Что касается .hover, я предлагаю вам прочитать на и использовать комбинацию .mouseenter, .mouseleave, .mousein и .mouseout. Я не помню, какой, но .hover на самом деле короткий для двух из них, но поддержка для него грубая. Один из этих наборов основан, в частности, на встроенных настройках IE, и я не думаю, что это тот, который .hover подходит для коротких рук.


UPDATE 1:

Основываясь на вашей обратной связи, что я бы посоветовал, что вы ищете исходный код .superFish и fancybox плагинов, чтобы убедиться, что они не используют fadeTo для opacity, как полностью нарушит ваш скрипт и что они используют правильные методы манипуляции opacity, которые совместимы с IE.

UPDATE 2:

Ваш .map() метод тоже неправильно. Из остальной части вашего кода я вижу, что вы пытаетесь создать ванильный JavaScript-массив, а не массив jQuery. Таким образом, вы должны позвонить .get() после .map(). Я нашел answer to another post, что и объясняет это.

UPDATE 3:

Я надеюсь, что я не глупо, но я заметил эту строку:

jQuery('div.moexpander').hide(); 

, которые вы имеете право, прежде чем создать обработчик щелчка для jQuery('div.moexpander'). Проблема в том, что я не вижу другого вызова в любом месте, чтобы показать jQuery('div.moexpander'). Если я прав, и вы не показали его снова, элемент div.moexpander никогда не будет показан, и обработчик никогда не будет использоваться. Я не знаю, насколько это важно для вашего кода/проблемы, поскольку я до сих пор не знаю ваших симптомов, но это, вероятно, ошибка.

UPDATE 4:

Кроме того, до тех пор, как мы отладки, вы должны пробежать свой код и завершить каждую функцию декларации с запятой. Например, изменить:

function someFunct() { 
    ..... 
} 

в

function someFunct() { 
    ..... 
}; 

Хотя это не требуется JavaScript, существует множество ситуаций, в которых это будет воздействовать/эффект ваши сценарии, и, в некоторых случаях, врезаться их ,

Если честно, я не совсем понимаю, почему это так, но я столкнулся с ситуациями, в которых это было проблемой, и я считаю, что некоторые из этих проблем были в IE.

UPDATE 5:

Если это все еще не работает, проверьте this thread на форуме JQuery, который занимается вопросами загрузки IE с участием FancyBox.

+0

Могу ли я спросить, почему вы думаете, что 'IE '(' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'на IE? По моему опыту, оба они отлично работают на IE с 6 до 10 (jQuery 1.9) или от 9 до 10 (jQuery 2.0). –

+0

Позвольте мне попробовать ваше решение. Спасибо за ответ. – Huroman

+0

@ FrédéricHamidi - Я не проверял обновления '.hover' и' .slideToggle', так как для 1.8.3+, так как я прекратил использовать их в 1.7.2, и они не были обновлены (или, по крайней мере, значительно) между этим временем и 1.8.2. Возможно, с тех пор были внесены новые изменения, но, тем более, что ОП не указывал версию, я думаю, было бы разумно указать на это. Чтобы ответить на ваш вопрос напрямую, все методы 'toggle' имеют проблемы с несколькими браузерами, особенно в IE. Эти проблемы ухудшаются, если события повторяются быстро или скрипты страниц требуют много накладных расходов. –

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