如果有div存在这样做,那么jquery无法正常工作

时间:2014-04-13 15:50:04

标签: jquery if-statement

我有一个jquery if else语句,但我的if语句有效,但我的else语句没有。

我转换了这个原始代码:

$('.pt-trigger').click(function() {
        $pageTrigger = $(this);
        Animate($pageTrigger);
    });

进入此(这是else语句不起作用的地方)

$('.pt-trigger').click(function() {
            if ( $(".pt-trigger").has(".tick") ) { 
                $(this).find('.tick').fadeIn(500, function() {
                    setTimeout(function() { 
                        $pageTrigger = $('.pt-trigger');
                        Animate($pageTrigger);
                    },400);
                });
            } 
            else {
                $pageTrigger = $(this);
                Animate($pageTrigger);
            }
    });

以下是我的一些HTML,其中一个显示刻度线,一个显示没有:

<div class="pt-trigger-container">
            <button class="pt-trigger" data-animation="1" data-goto="-1">
                Get started
            </button>
        </div>

<div class="pt-trigger-container clearfix">
                <button class="pt-trigger push" data-animation="1" data-goto="-1">
                    Constantly active
                    <div class="tick">
                        <i class="icon-ok-circled2"></i>
                    </div>
                </button>
</div>

2 个答案:

答案 0 :(得分:1)

两个按钮都有.pt-trigger个等级,因此$(".pt-trigger").has(".tick")始终返回一组元素。

使用$(this)仅检查点击的按钮并检查长度以查看此设置是否为空:

if ( $(this).has(".tick").length != 0 ) { 

答案 1 :(得分:0)

$(".pt-trigger")返回每个 DOM元素的列表class=pt_trigger。因此$(".pt-trigger").has(".tick")不是真/假函数,它是过滤器,只返回其中包含class=tick个元素的过滤器。

除非您要动态更改哪些class=tick,否则jQuery方式会为每个案例提供自己的回调:

var triggers = $('.pt-trigger');
triggers.has(".tick").click(function() {
    $(this).find('.tick').fadeIn(500, function() {
        setTimeout(function() { 
            $pageTrigger = $('.pt-trigger');
            Animate($pageTrigger);
        },400);
    });
});

triggers.not(triggers.has(".tick")).click(function() {
    $pageTrigger = $(this);
    Animate($pageTrigger);
});