Javascript .slideUp()未按预期工作
我有一个图标,可以触发向上滑动和向下滑动的效果,但在向下滑动后,如果我再次按下同一个图标,它将不再起作用Javascript .slideUp()未按预期工作,javascript,jquery,css,twitter-bootstrap-3,Javascript,Jquery,Css,Twitter Bootstrap 3,我有一个图标,可以触发向上滑动和向下滑动的效果,但在向下滑动后,如果我再次按下同一个图标,它将不再起作用 $(document).ready(function(){ $('.subcat-row').hide(); $("body").on("click",'.drop-subcat', function () { if($(this).children('i').attr('class','fa fa-toggle-down drop-down-icon'
$(document).ready(function(){
$('.subcat-row').hide();
$("body").on("click",'.drop-subcat', function () {
if($(this).children('i').attr('class','fa fa-toggle-down drop-down-icon')){
$(this).closest('.category-row').siblings('.subcat-row').slideDown(500);
$(this).children('.drop-down-icon').attr('class', 'fa fa-toggle-up drop-down-icon');
} else if( $(this).children('i').attr('class','fa fa-toggle-up drop-down-icon') ){
$(this).closest('.category-row').siblings('.subcat-row').slideUp(500);
$(this).children('.drop-down-icon').attr('class', 'fa fa-toggle-down drop-down-icon');
}
});
});
这是我做的JSFIDLE
不要这样做:$(this).children('i').attr('class','fa-fa-toggle-down-down-icon')
,但使用保存状态
比较是否为元素设置了某个类的最简单方法是
但是我会使用.data()
不要这样做:$(this).children('I').attr('class','fa-fa-toggle-down-down-icon')
,但是用保存状态
比较是否为元素设置了某个类的最简单方法是
但是我会使用.data()
不要这样做:$(this).children('I').attr('class','fa-fa-toggle-down-down-icon')
,但是用保存状态
比较是否为元素设置了某个类的最简单方法是
但是我会使用.data()
不要这样做:$(this).children('I').attr('class','fa-fa-toggle-down-down-icon')
,但是用保存状态
比较是否为元素设置了某个类的最简单方法是
但是我会使用
.data()
您遇到的问题就是这个
.attr('class','fa fa-toggle-up drop-down-icon')
这将class属性设置为“fa-fa-toggle-up下拉图标”
,因此在if语句中使用不正确(即不返回布尔值)。我想你的意思是测试这个类,所以使用hascalass(它返回一个布尔值,true或false),比如
$(document).ready(function(){
$('.subcat-row').hide();
$("body").on("click",'.drop-subcat', function () {
if($(this).children('i').hasClass('fa fa-toggle-down drop-down-icon')){
$(this).closest('.category-row').siblings('.subcat-row').slideDown(500);
$(this).children('.drop-down-icon').attr('class', 'fa fa-toggle-up drop-down-icon');
}else if($(this).children('i').hasClass('fa fa-toggle-up drop-down-icon')){
$(this).closest('.category-row').siblings('.subcat-row').slideUp(500);
$(this).children('.drop-down-icon').attr('class', 'fa fa-toggle-down drop-down-icon');
}
});
});
如果事实上使用类,正如您希望添加一个类来指示它处于关闭状态,对于向上也一样,只需使用标准的jQuery类函数,即addClass
,hasClass
,removeClass
或toggleClass
,比使用attr
容易得多
$(document).ready(function(){
$('.subcat-row').hide();
$("body").on("click",'.drop-subcat', function () {
var childi = $(this).children('i');
if(childi.hasClass('fa-toggle-down')){
$(this).closest('.category-row').siblings('.subcat-row').slideDown(500);
}else if(childi.hasClass('fa-toggle-up')){
$(this).closest('.category-row').siblings('.subcat-row').slideUp(500);
}
childi.toggleClass('fa-toggle-up fa-toggle-down');
});
});
或者对于变量缓存,从小代码的角度来看,通过字符串和方括号利用三元运算符和javascript方法调用,尝试以下方法
$(document).ready(function(){
$('.subcat-row').hide();
$("body").on("click",'.drop-subcat', function () {
var self = $(this),
childi = self.children('i'),
slideDirection = childi.hasClass('fa-toggle-down') ? "slideDown":"slideUp";
self.closest('.category-row').siblings('.subcat-row')[slideDirection](500);
childi.toggleClass('fa-toggle-up fa-toggle-down');
});
});
你遇到的问题是这个
.attr('class','fa fa-toggle-up drop-down-icon')
这将class属性设置为“fa-fa-toggle-up下拉图标”
,因此在if语句中使用不正确(即不返回布尔值)。我想你的意思是测试这个类,所以使用hascalass(它返回一个布尔值,true或false),比如
$(document).ready(function(){
$('.subcat-row').hide();
$("body").on("click",'.drop-subcat', function () {
if($(this).children('i').hasClass('fa fa-toggle-down drop-down-icon')){
$(this).closest('.category-row').siblings('.subcat-row').slideDown(500);
$(this).children('.drop-down-icon').attr('class', 'fa fa-toggle-up drop-down-icon');
}else if($(this).children('i').hasClass('fa fa-toggle-up drop-down-icon')){
$(this).closest('.category-row').siblings('.subcat-row').slideUp(500);
$(this).children('.drop-down-icon').attr('class', 'fa fa-toggle-down drop-down-icon');
}
});
});
如果事实上使用类,正如您希望添加一个类来指示它处于关闭状态,对于向上也一样,只需使用标准的jQuery类函数,即addClass
,hasClass
,removeClass
或toggleClass
,比使用attr
容易得多
$(document).ready(function(){
$('.subcat-row').hide();
$("body").on("click",'.drop-subcat', function () {
var childi = $(this).children('i');
if(childi.hasClass('fa-toggle-down')){
$(this).closest('.category-row').siblings('.subcat-row').slideDown(500);
}else if(childi.hasClass('fa-toggle-up')){
$(this).closest('.category-row').siblings('.subcat-row').slideUp(500);
}
childi.toggleClass('fa-toggle-up fa-toggle-down');
});
});
或者对于变量缓存,从小代码的角度来看,通过字符串和方括号利用三元运算符和javascript方法调用,尝试以下方法
$(document).ready(function(){
$('.subcat-row').hide();
$("body").on("click",'.drop-subcat', function () {
var self = $(this),
childi = self.children('i'),
slideDirection = childi.hasClass('fa-toggle-down') ? "slideDown":"slideUp";
self.closest('.category-row').siblings('.subcat-row')[slideDirection](500);
childi.toggleClass('fa-toggle-up fa-toggle-down');
});
});
你遇到的问题是这个
.attr('class','fa fa-toggle-up drop-down-icon')
这将class属性设置为“fa-fa-toggle-up下拉图标”
,因此在if语句中使用不正确(即不返回布尔值)。我想你的意思是测试这个类,所以使用hascalass(它返回一个布尔值,true或false),比如
$(document).ready(function(){
$('.subcat-row').hide();
$("body").on("click",'.drop-subcat', function () {
if($(this).children('i').hasClass('fa fa-toggle-down drop-down-icon')){
$(this).closest('.category-row').siblings('.subcat-row').slideDown(500);
$(this).children('.drop-down-icon').attr('class', 'fa fa-toggle-up drop-down-icon');
}else if($(this).children('i').hasClass('fa fa-toggle-up drop-down-icon')){
$(this).closest('.category-row').siblings('.subcat-row').slideUp(500);
$(this).children('.drop-down-icon').attr('class', 'fa fa-toggle-down drop-down-icon');
}
});
});
如果事实上使用类,正如您希望添加一个类来指示它处于关闭状态,对于向上也一样,只需使用标准的jQuery类函数,即addClass
,hasClass
,removeClass
或toggleClass
,比使用attr
容易得多
$(document).ready(function(){
$('.subcat-row').hide();
$("body").on("click",'.drop-subcat', function () {
var childi = $(this).children('i');
if(childi.hasClass('fa-toggle-down')){
$(this).closest('.category-row').siblings('.subcat-row').slideDown(500);
}else if(childi.hasClass('fa-toggle-up')){
$(this).closest('.category-row').siblings('.subcat-row').slideUp(500);
}
childi.toggleClass('fa-toggle-up fa-toggle-down');
});
});
或者对于变量缓存,从小代码的角度来看,通过字符串和方括号利用三元运算符和javascript方法调用,尝试以下方法
$(document).ready(function(){
$('.subcat-row').hide();
$("body").on("click",'.drop-subcat', function () {
var self = $(this),
childi = self.children('i'),
slideDirection = childi.hasClass('fa-toggle-down') ? "slideDown":"slideUp";
self.closest('.category-row').siblings('.subcat-row')[slideDirection](500);
childi.toggleClass('fa-toggle-up fa-toggle-down');
});
});
你遇到的问题是这个
.attr('class','fa fa-toggle-up drop-down-icon')
这将class属性设置为“fa-fa-toggle-up下拉图标”
,因此在if语句中使用不正确(即不返回布尔值)。我想你的意思是测试这个类,所以使用hascalass(它返回一个布尔值,true或false),比如
$(document).ready(function(){
$('.subcat-row').hide();
$("body").on("click",'.drop-subcat', function () {
if($(this).children('i').hasClass('fa fa-toggle-down drop-down-icon')){
$(this).closest('.category-row').siblings('.subcat-row').slideDown(500);
$(this).children('.drop-down-icon').attr('class', 'fa fa-toggle-up drop-down-icon');
}else if($(this).children('i').hasClass('fa fa-toggle-up drop-down-icon')){
$(this).closest('.category-row').siblings('.subcat-row').slideUp(500);
$(this).children('.drop-down-icon').attr('class', 'fa fa-toggle-down drop-down-icon');
}
});
});
如果事实上使用类,正如您希望添加一个类来指示它处于关闭状态,对于向上也一样,只需使用标准的jQuery类函数,即addClass
,hasClass
,removeClass
或toggleClass
,比使用attr
容易得多
$(document).ready(function(){
$('.subcat-row').hide();
$("body").on("click",'.drop-subcat', function () {
var childi = $(this).children('i');
if(childi.hasClass('fa-toggle-down')){
$(this).closest('.category-row').siblings('.subcat-row').slideDown(500);
}else if(childi.hasClass('fa-toggle-up')){
$(this).closest('.category-row').siblings('.subcat-row').slideUp(500);
}
childi.toggleClass('fa-toggle-up fa-toggle-down');
});
});
或者对于变量缓存,从小代码的角度来看,通过字符串和方括号利用三元运算符和javascript方法调用,尝试以下方法
$(document).ready(function(){
$('.subcat-row').hide();
$("body").on("click",'.drop-subcat', function () {
var self = $(this),
childi = self.children('i'),
slideDirection = childi.hasClass('fa-toggle-down') ? "slideDown":"slideUp";
self.closest('.category-row').siblings('.subcat-row')[slideDirection](500);
childi.toggleClass('fa-toggle-up fa-toggle-down');
});
});
我不认为你的
if
子句做了你认为他们做的事情。(他们正在设置类,而不是测试它们。)我向您保证slideUp
完全按照预期工作;问题出在你的逻辑上。Bootstrap有一个折叠插件,它已经做到了这一点;你不使用它有什么原因吗?我不认为你的,如果子句在做你认为它们在做的事情。(他们正在设置类,而不是测试它们。)我向您保证slideUp
完全按照预期工作;问题出在你的逻辑上。Bootstrap有一个折叠插件,它已经做到了这一点;你不使用它有什么原因吗?我不认为你的,如果子句在做你认为它们在做的事情。(他们正在设置类,而不是测试它们。)我向您保证slideUp
完全按照预期工作;问题出在你的逻辑上。Bootstrap有一个折叠插件,它已经做到了这一点;你不使用它有什么原因吗?我不认为你的,如果子句在做你认为它们在做的事情。(他们正在设置类,而不是测试它们。)我向您保证slideUp
完全按照预期工作;问题出在你的逻辑上。Bootstrap有一个折叠插件,它已经做到了这一点;你不使用它有什么原因吗?