2013-06-26 4 views
0

'm довольно новичок в javascript/jquery, поэтому любая помощь, которую я могу получить, будет очень оценена. Событие onclick запускается в Firefox, Chrome и IE9 ... но не в IE8 и ранее. Что я делаю не так?Событие Onclick не срабатывает в IE8 и ранее

HTML

<ul id="list"> 
<li><a href="url">Item 1</a><a href="javascript:void(0)" class="info-toggle" onclick="toggleInfo(event)"></a> 
<p>Informational text</p> 
</li> 
<li><a href="url">Item 2</a><a href="javascript:void(0)" class="info-toggle" onclick="toggleInfo(event)"></a> 
<p>Informational text</p> 
</li> 
</ul> 

CSS

#list li p { 
display: none; 
} 

#list li .info-toggle { 
    background: url(../../images/info-blue17.png) no-repeat; 
    display: inline-block; 
    height: 17px; 
    margin: 0 0 -3px 10px; 
    width: 17px; 
} 

#list li.expanded p { 
    display: block; 
} 

#list li.expanded .info-toggle { 
    background: url(../../images/info-17.png) no-repeat; 

Javascript

function toggleInfo(event) { 
    $target = $(event.target); 
    $target.parent().toggleClass("expanded"); 
    } 

Если мне нужно предоставить любую дополнительную код/​​данные, пожалуйста, дайте мне знать.

Большое спасибо заранее.

+1

Какую версию JQuery вы используете? – j08691

+1

Почему у вас есть '} (jQuery);' в конце вашей функции 'toggleInfo'? – Ian

+0

Я использую 1.7.1. И мой нуб ответ на ваш вопрос, Ян, заключается в том, что он работает с ним и не работает без него. Я честно (и смущающе) не совсем уверен, что он делает. – user2521958

ответ

1

Вы можете использовать чистый код JQuery, как показано ниже

$(document).ready(function() { 
    $('#list a').click(function(e) { 
     e.preventDefault(); 
     $(this).parent().toggleClass("expanded"); 
    }); 
}); 

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

HTML

<ul id="list"> 
    <li> 
     <a href="url">Item 1</a> 
     <a href="javascript:void(0)" class="info-toggle" onclick="return toggleInfo(this)"></a> 
     <p>Informational text</p> 
    </li> 
    <li> 
     <a href="url">Item 2</a> 
     <a href="javascript:void(0)" class="info-toggle" onclick="return toggleInfo(this)"></a> 
     <p>Informational text</p> 
    </li> 
</ul> 

JS

function toggleInfo(el) { 
    $(el).parent().toggleClass("expanded"); 
    return false; 
} 

CSS

#list li p { 
    display: none; 
} 

#list li .info-toggle { 
    background: blue url(../../images/info-blue17.png) no-repeat; 
    display: inline-block; 
    height: 17px; 
    margin: 0 0 -3px 10px; 
    width: 17px; 
} 

#list li.expanded p { 
    display: block; 
} 

#list li.expanded .info-toggle { 
    background: #666 url(../../images/info-17.png) no-repeat; 
} 
+0

К сожалению, это похоже на конфликт с другой функцией jQuery, которая есть в моем js-файле. Когда другая функция будет выполнена, я попробую это, она не будет запускаться в любом браузере. После нескольких дней устранения неполадок, включение события onclick в html было моим обходным решением. Благодарю вас за предложение. – user2521958

+0

Если конфликт из-за другой js-библиотеки, то вы можете попробовать 'jQuery.noConflict();' http://api.jquery.com/jQuery.noConflict/ –

+0

Я пробовал (среди многих других) при устранении неполадок. К сожалению, он закрыл весь мой сценарий. Я ценю предложение, но я думаю, что я буду придерживаться того, что в html есть onclick. Я считаю, что код, не работающий в IE8, и ниже, является меньшим из двух зол. Тем не менее, я ценю эту рекламу. – user2521958

0
function toggleInfo(event) { 
    $target = $(event.target); 
    $target.parent().toggleClass("expanded"); 
} 

Мой совет должен сделать console.log($(event.target)) и убедитесь, что это якорный тег (или любой другой) правильный элемент вы предполагаете, что это будет.

+0

Я только что сделал это и получил следующее сообщение об ошибке: Uncaught TypeError: Невозможно прочитать свойство «target» неопределенного поискаDbases.js: 12 (анонимная функция) – user2521958

+0

Изменить 'function toggleInfo (event) {' to just 'function toggleInfo() {'и он должен работать. –

+0

Если я удалю «событие», он не работает в Firefox или IE. Благодарю вас за предложение. – user2521958