Скрипт не работает после обновления jquery - PullRequest
0 голосов
/ 28 марта 2019

Есть скрипт, который отображает архив публикации. Первоначально отображается список лет. При нажатии на год отображается список проблем. Когда вы нажимаете на проблему, она загружается.

Изначально отображаются все годы. Проблемы на протяжении многих лет скрыты повсюду, при этом ничего не отображается, при щелчке оно преобразуется для отображения наследования.

Это должно выглядеть так:

<ul>
    <li class="arrow">▲</li>
    <li class="journals">
        <ul class="ye">
            <li class="year">2019</li>
            <ul class="in_nums 2019" style="display: none;">
                <li data-issue="7633">№1(67)</li>
            </ul>
            <li class="year">2018</li>
            <ul class="in_nums 2018" style="display: none;">
                <li data-issue="6998">№1(63)</li>
                <li data-issue="7163">№2(64)</li>
                <li data-issue="7320">№3(65)</li>
                <li data-issue="7474">№4(66)</li>
            </ul>
        </ul>
    </li>
    <li class="arrow">▼</li>

После обновления с версии 1.7.2 до 3.3.1 следующий код работает некорректно:

$(document).ready(function(){
    $('li.year').toggle(function(){
        $('.in_nums').css('display','none')
        var y = $(this).text()
        $('.'+y).css('display','inherit')
    },
    function(){
        var y = $(this).text()
        $('.'+y).css('display','none')
    })
    $('.in_nums li').click(function(){
        $('#fresh').html('<img src="images/30.gif"/>');
        $.post(location.href,{'art_id':$(this).data('issue')},function(data){
            var result = $.parseJSON(data);
            var fresh = '<div class="lastjor">[[%babel.archive_[[++cultureKey]]]]</div>'
            $('#fresh').html(fresh+result.output)
            $('#latest').html(result.current)
        })
    })
    $.post(location.href,{'art_id':[[!getLastIssueID]]},function(data){
        var result = $.parseJSON(data);
        var fresh = '<div class="lastjor">[[%babel.lastjor_[[++cultureKey]]]]</div>'
        $('#fresh').html(fresh+result.output)
        $('#latest').html(result.current)
    })
})

Добавляет отображение нет к году публикаций:

<ul>
    <li class="arrow">▲</li>
    <li class="journals">
        <ul class="ye">
            <li class="year" style="display: none;">2019</li>
            <ul class="in_nums 2019" style="display: none;">
                <li data-issue="7633">№1(67)</li>
            </ul>
            <li class="year" style="display: none;">2018</li>
            <ul class="in_nums 2018" style="display: none;">
                <li data-issue="6998">№1(63)</li>
                <li data-issue="7163">№2(64)</li>
                <li data-issue="7320">№3(65)</li>
                <li data-issue="7474">№4(66)</li>
            </ul>
        </ul>
    </li>
    <li class="arrow">▼</li>

Что-то изменилось в синтаксисе jQuery или в чем может быть проблема?

1 Ответ

1 голос
/ 28 марта 2019

Аргументы, которые вы передаете .toggle(), соответствуют использованию, которое было удалено из jQuery в версии 1.9 , и поэтому эти функции больше не соответствуют обработчикам кликов.Вместо этого вызов toggle скроет выбранные элементы и затем выполнит функцию, переданную в качестве второго аргумента.

Чтобы получить сопоставимую функциональность на вашей странице, как это было в версии 1.7.2, замените это:

$('li.year').toggle(function(){
    $('.in_nums').css('display','none')
    var y = $(this).text()
    $('.'+y).css('display','inherit')
},
function(){
    var y = $(this).text()
    $('.'+y).css('display','none')
})

с:

$('li.year').click(function(){
    var y = $(this).text();
    var isVisible = $('.'+y).is(":visible");
    $('.in_nums').hide();
    $('.'+y).toggle(!isVisible);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...