Jquery with(':visible')和Toggle

时间:2015-08-04 16:36:30

标签: jquery onclick toggle visible

我有这个HTML代码

<div id="testb">This will have a blue background the background when the below text will have disappeared</div>
<input class="loginButton" type="submit" value="Login" />
</div>
<div id="testa">this text will disappear when I click the button</div>

和这个jquery脚本

$('.loginButton').click(function (event) {
    $('#testa').toggle();
});

if ($('#testa').is(':visible')) {
    $("#testb").css("background-color", "red");
} else {
    $("#testa").css("background-color", "blue");
}

我想改变背景的颜色,这取决于#testa是否可见。我不想在click事件上实现代码。它没有用,为什么?

2 个答案:

答案 0 :(得分:0)

Jquery不会像这样执行动态绑定。你的if / else语句被评估一次(在运行时),并且该语句不再运行(除非它是另一个被多次调用的代码块的一部分)。

实现这一目标的唯一方法是实际评估testa可见性的状态,然后切换背景。

讨厌告诉你,但没有动作,就没有反应。 onclick是唯一的方法。

我建议你将if / else包装在一个函数中,并调用该函数:

$('.loginButton').click( function(event){
    $('#testa').toggle();  
    toggleBG(); 
});

function toggleBG{
    if($('#testa').is(':visible')) {
        $("#testb").css("background-color", "red"); 
    } else{
        $("#testa").css("background-color", "blue"); 
    }
}

对于记录,如果您想要紧凑,可以在一行中执行此操作:

$('.loginButton').click( function(event){
    $('#testa').toggle();  
    $("#testb").css("background-color", $('#testa').is(':visible') ? "red" : "blue");
});

答案 1 :(得分:0)

因为您在网站加载时第一次检查is(':visible'),仅在那时。

如果您每次点击它都需要检查,则需要将is(':visible')放入切换功能

$('.loginButton').click( function(event){
    $('#testa').toggle(function() { 
        // this part will check everytime toggle load
        if($('#testa').is(':visible')) {
            $("#testb").css("background-color", "red"); 
        } else{
            $("#testa").css("background-color", "blue"); 
        }
    });   
});

// this will check at the first time
if($('#testa').is(':visible')) {
    $("#testb").css("background-color", "red"); 
} else{
    $("#testa").css("background-color", "blue"); 
}