首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找选项jQuery不工作(我使用错了)

查找选项jQuery不工作(我使用错了)
EN

Stack Overflow用户
提问于 2015-09-23 10:16:09
回答 1查看 67关注 0票数 0

我有一个选项卡,我想用jQuery上下滑动。我有一个在Backbone.js中构建的示例,但是如果没有backbone.js框架,我似乎无法让它工作。

JSfiddle在这里

这是很多代码,所以细节在JSfiddle中。我这里有一个简短的版本:

代码语言:javascript
复制
<ol class="sortable row list_item_area"><li pageid="1012" data-ordering="0">
    <div class="panel margin-10 panel-info">
        <div class="panel-heading heading-sm padding-5-important main-handle">
            <div class="pull-left">
                <a class="btn _options-more" data-id="1012" title="Toon/verberg opties"><i class="fa fa-chevron-up"></i></a>
            </div>
        <div class="panel-body no-padding" data-id="1009" style="display: none;">
            <form data-id="1009">
                <CONTENT here>
            </form>
        </div>
    </div>
</div>

我现在拥有的jQuery脚本:

代码语言:javascript
复制
$("._options-more").click(function(event){
    var clicked = $(event.currentTarget);
    
    if(clicked.attr('data-id'))
    {
        console.log(clicked.attr('data-id'));
        id=clicked.attr('data-id');
        $(this).find('.panel-body[data-id="'+ id +'"]').show();
        $(this).parent().find('.panel-body[data-id="'+ id +'"]').slideDown();
        clicked.find('i').removeClass('fa-chevron-down').addClass('fa-chevron-up');
        clicked.removeClass('_options-more').addClass('_options-less');
    }

    event.preventDefault();
    });

$("._options-less").click(function(event){
        var clicked = $(event.currentTarget);

        if(clicked.attr('data-id'))
        {
            id=clicked.attr('data-id');
            $(this).find('._options-more[data-id="'+ id +'"]').show();
            $(this).parent().find('.panel-body[data-id="'+ id +'"]').slideUp();
            $(this).find('._more-options-container[data-id="'+ id +'"]').hide();
            clicked.find('i').removeClass('fa-chevron-up').addClass('fa-chevron-down');
            clicked.removeClass('_options-less').addClass('_options-more');
        }

        event.preventDefault();
});

这里有两个市长问题:

  1. 选择器找不到面板主体,因此css不会更改。结果:面板-身体保持隐藏。
  2. 似乎找到了"fa-chevron-down“,并将其更改为"fa-chevron-up",但是第二个脚本不会将它改回来吗?

也许我只需要从头开始,但我想从中吸取教训,找出错误的地方。所以每一个帮助都是值得感激的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-23 10:26:13

在单击回调中,this将引用已单击的元素,在您的示例中是<a>

可以使用.closest('.panel')获取.panel元素,然后找到.panel-body

代码语言:javascript
复制
$(this).closest('.panel').find('.more-options-container[data-id="' + id + '"]').show();

对于_options-less,您需要使用on而不是直接使用click,因为在设置click侦听器时没有_options-less元素:

代码语言:javascript
复制
$(".panel").on('click', '._options-less', function (event) {

它将为现在和将来存在的所有._options-less创建一个._options-less侦听器。

on的文档:http://api.jquery.com/on/

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32736849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档