当我单击 make sort(a-n) array 然后再次单击以 sort(b-a) 时,如何制作单击按钮
How can i make a click button when do i click make sort(a-b) array and then click again to sort(b-a)
这是我的问题
当我单击 make array.sort(x-y) 然后再次单击以 make array.sort(y-x)
时,如何制作单击按钮
我已经有了这个功能,但我不知道怎么做...
让我澄清一下我的问题:我什么时候点击按钮让数组从大到小排序,然后我想按下同一个按钮让数组从小到大排序
这是我的代码:
$(".lower").click(() => {
colorsValueMenu("highest", "spot", "gainers", "losers", "lower")
highest = arrayCoinsD.sort(function (a, b) { return b.quote.USD.percent_change_24h - a.quote.USD.percent_change_24h })
createCoinDiv(arrayCoinsD, arrayCoinsI)
$(".lower").click(() => {
colorsValueMenu("lower", "spot", "gainers", "losers", "highest")
lower = arrayCoinsD.sort(function (a, b) { return a.quote.USD.percent_change_24h - b.quote.USD.percent_change_24h })
createCoinDiv(arrayCoinsD, arrayCoinsI)
})
})
这是有效的,但只是第一次和第二次...我想让它像每次点击的 toggleClass 动作一样
您应该编写代码 DRY (Don't Repeat Yourself)
您可以创建一个 flag
并根据 flag
将操作更改为:
let flag = "high";
$(".lower").click(() => {
// Highest
colorsValueMenu(
flag === "high" ? "highest" : "lower",
"spot",
"gainers",
"losers",
"lower"
);
highest = arrayCoinsD.sort(function (a, b) {
return flag === "high"
? b.quote.USD.percent_change_24h - a.quote.USD.percent_change_24h
: a.quote.USD.percent_change_24h - b.quote.USD.percent_change_24h;
});
createCoinDiv(arrayCoinsD, arrayCoinsI);
flag = flag === "high" ? "low" : "high";
});
您现在正在做的是在#lower 上创建一个事件侦听器。这将按照您的要求执行 sort(a-b) ,但是在该事件侦听器内部您正在创建另一个事件侦听器,这是行不通的。您可以做的是像建议的评论中的人一样创建一个标志。一个例子是:
flag = false;
("#lower").click(() => {
flag = !flag;
if (flag) {
//do this thing;
} else {
//do this other thing;
}
}
这样,每当您单击它时,行为就会交替。然后您可以使用它以不同的方式进行排序。
您可以使用toggle
方法进行升序,当您再次点击降序时,如下所示:
$(".lower").toggle(function(){
// Ascending code or function
}, function (){
// Descending code or function
})
在这里查看官方参考资料:https://api.jquery.com/toggle-event/
这是我的问题 当我单击 make array.sort(x-y) 然后再次单击以 make array.sort(y-x)
时,如何制作单击按钮我已经有了这个功能,但我不知道怎么做...
让我澄清一下我的问题:我什么时候点击按钮让数组从大到小排序,然后我想按下同一个按钮让数组从小到大排序
这是我的代码:
$(".lower").click(() => {
colorsValueMenu("highest", "spot", "gainers", "losers", "lower")
highest = arrayCoinsD.sort(function (a, b) { return b.quote.USD.percent_change_24h - a.quote.USD.percent_change_24h })
createCoinDiv(arrayCoinsD, arrayCoinsI)
$(".lower").click(() => {
colorsValueMenu("lower", "spot", "gainers", "losers", "highest")
lower = arrayCoinsD.sort(function (a, b) { return a.quote.USD.percent_change_24h - b.quote.USD.percent_change_24h })
createCoinDiv(arrayCoinsD, arrayCoinsI)
})
})
这是有效的,但只是第一次和第二次...我想让它像每次点击的 toggleClass 动作一样
您应该编写代码 DRY (Don't Repeat Yourself)
您可以创建一个 flag
并根据 flag
将操作更改为:
let flag = "high";
$(".lower").click(() => {
// Highest
colorsValueMenu(
flag === "high" ? "highest" : "lower",
"spot",
"gainers",
"losers",
"lower"
);
highest = arrayCoinsD.sort(function (a, b) {
return flag === "high"
? b.quote.USD.percent_change_24h - a.quote.USD.percent_change_24h
: a.quote.USD.percent_change_24h - b.quote.USD.percent_change_24h;
});
createCoinDiv(arrayCoinsD, arrayCoinsI);
flag = flag === "high" ? "low" : "high";
});
您现在正在做的是在#lower 上创建一个事件侦听器。这将按照您的要求执行 sort(a-b) ,但是在该事件侦听器内部您正在创建另一个事件侦听器,这是行不通的。您可以做的是像建议的评论中的人一样创建一个标志。一个例子是:
flag = false;
("#lower").click(() => {
flag = !flag;
if (flag) {
//do this thing;
} else {
//do this other thing;
}
}
这样,每当您单击它时,行为就会交替。然后您可以使用它以不同的方式进行排序。
您可以使用toggle
方法进行升序,当您再次点击降序时,如下所示:
$(".lower").toggle(function(){
// Ascending code or function
}, function (){
// Descending code or function
})
在这里查看官方参考资料:https://api.jquery.com/toggle-event/