Вкладки jQuery / JavaScript не работают для IE9 - PullRequest
0 голосов
/ 02 апреля 2012

У меня есть эти вкладки, которые отлично работают в любом браузере, кроме IE 9. Я уже несколько дней пытаюсь решить эту проблему, и я думаю, что схожу с ума.

<div class="product-collateral">

         <div class="tab"><h3 class="product_tabs_additional">Additional Information</h3></div>
        <div class="product-tabs-content" id="product_tabs_additional_contents">
            Additional Information Content
        </div>

        <div class="tab"><h3 class="product_tabs_agenda">Agenda</h3></div>
        <div class="product-tabs-content" id="product_tabs_agenda_contents">
            Agenda Content
        </div>


        <div class="tab"><h3 class="product_tabs_terms">Terms and Conditions</h3></div>
        <div class="product-tabs-content" id="product_tabs_terms_contents">
            Terms and Conditions Content
        </div>


        <div class="tab"><h3 class="product_tabs_locations">Locations</h3></div>
        <div class="product-tabs-content" id="product_tabs_locations_contents">
            Locations Content
    </div></div>

1004 *

<script type = "text/javascript" > $jQ = jQuery.noConflict();
$jQ('.product-collateral .tab h3').wrapAll('<ul class="product-tabs"></ul>').wrap('<li></li>');
$jQ('.product-collateral .product-tabs li').each(function(index) {
    $jQ(this).attr('id', $jQ(this).find('h3').attr('class'));
    if (index === 0) {
        $jQ(this).addClass('active');
    }
});
//<![CDATA[
Varien.Tabs = Class.create();
Varien.Tabs.prototype = {
    initialize: function(selector) {
        var self = this;
        $$(selector + ' h3').each(this.initTab.bind(this));
    },

    initTab: function(el) {
        el.href = 'javascript:void(0)';
        if ($(el.parentNode).hasClassName('active')) {
            this.showContent(el);
        }
        el.observe('click', this.showContent.bind(this, el));
    },

    showContent: function(a) {
        var li = $(a.parentNode),
            ul = $(li.parentNode);
        ul.select('li', 'ol').each(function(el) {
            var contents = $(el.id + '_contents');
            if (el == li) {
                el.addClassName('active');
                contents.show();
            } else {
                el.removeClassName('active');
                contents.hide();
            }
        });
    }
}
new Varien.Tabs('.product-tabs');
//]]>
< /script>​

Я знаю, что в одной из строк $$(selector + ' h3').each(this.initTab.bind(this)); есть 2x $, но без него скрипт перестает работать.

Я вообще не специалист по JavaScript, поэтому моя проблема. Самым странным для меня является то, что этот скрипт работает в IE7 и 8 режиме без каких-либо проблем. Только IE9 ломается.

Любая помощь высоко ценится.

Заранее спасибо

Дом

Ответы [ 2 ]

1 голос
/ 02 апреля 2012

Пожалуйста, проверьте ваш код и избегайте объявления нескольких версий jQuery на странице. Я думаю, что это проблема конфликта jQuery.

0 голосов
/ 02 апреля 2012

Глядя на свою страницу, вы используете старую версию прототипа (1.6.0.3), выпущенную в 2008 году, предшествующую IE9.В этой версии при запуске строки: ul.select('li', 'ol') возвращается пустой список вместо ожидаемого списка из 4 элементов.

Быстрое исправление : попробуйте изменить строку на: ul.select('li'), который должен выбрать все элементы, которые вы хотите здесь.

Лучшее исправление : Обновить до последней версии prototype (1.7) .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...