【问题标题】:Script does not work after updating jquery更新 jquery 后脚本不起作用
【发布时间】:2019-03-29 00:16:49
【问题描述】:

有一个显示出版物存档的脚本。最初,显示年份列表。单击年份会显示问题列表。当您单击该问题时,它会加载。

最初会显示所有年份。多年来的问题到处都隐藏,不显示,点击后,转换为显示继承。

应该是这样的:

<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 语法有什么变化或者可能是什么问题?

【问题讨论】:

  • 你的控制台有错误吗?
  • 我相信是因为你打电话给toggle。你想通过传递两个函数来切换来实现什么,我在 jQuery 文档中没有看到这个?
  • @Adder 你是对的,它已被弃用,很可能是问题的原因。文档在这里:api.jquery.com/toggle-event
  • @RoryMcCrossan 是的,并且该文档指出它不仅已被弃用,而且在 1.9 中已被删除。
  • 升级时总是值得一看的升级指南:jquery.com/upgrade-guide/1.9

标签: jquery css css-selectors


【解决方案1】:

您传递给.toggle() 的参数对应于removed from jQuery in version 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);
});

【讨论】:

  • 非常感谢!但是还有一个小问题——最初显示列表是打开的,是否可以先显示一年,然后隐藏问题再点击年份? clip2net.com/s/40HKaEF
  • 您希望在页面加载时关闭列表吗?然后在我发布的所有代码前添加一行:$('.in_nums').hide();
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-29
  • 2014-11-18
  • 1970-01-01
相关资源
最近更新 更多