Javascript 为什么这个JQuery只有在console.log变量不正确时才起作用?
我对jquery比较陌生,每次单击都试图更改js手风琴上的上下箭头,不幸的是,我遇到了一个错误,只有当我将console.log记录为一个错误变量时,它才起作用。当我点击“embiggen(1)”时,是否有人对我可能做错的事情有任何指导,例如,如果它的手风琴id为1 围绕html还有一些其他问题,但具体来说,为什么只有当我使用console.log;,它才起作用Javascript 为什么这个JQuery只有在console.log变量不正确时才起作用?,javascript,jquery,Javascript,Jquery,我对jquery比较陌生,每次单击都试图更改js手风琴上的上下箭头,不幸的是,我遇到了一个错误,只有当我将console.log记录为一个错误变量时,它才起作用。当我点击“embiggen(1)”时,是否有人对我可能做错的事情有任何指导,例如,如果它的手风琴id为1 围绕html还有一些其他问题,但具体来说,为什么只有当我使用console.log;,它才起作用 function arrowup(id){ $('#downarrow'+id).remove(); $('#dropdown'+id
function arrowup(id){
$('#downarrow'+id).remove();
$('#dropdown'+id).append('</a>');
$('#dropdown'+id).append('<i id="uparrow'+ id +'" class="icon-1 icon-chevron-up">');
}
function arrowdown(id){
$('#uparrow'+id).remove();
$('#dropdown'+id).append('</a>');
$('#dropdown'+id).append('<i id="downarrow'+ id +'" class="icon-1 icon-chevron-down">');
}
//Switches the arrows
function embiggen(id){
var up = $('#uparrow'+id).length;
if (up == 1){
arrowdown(id);
console.log(i see you);
}
var down = $('#downarrow'+id).length;
if (down == 1){
arrowup(id);
}
}
函数箭头向上(id){
$('#向下箭头'+id).remove();
$(“#下拉列表”+id).append(“”);
$(“#下拉列表”+id).append(“”);
}
函数箭头向下(id){
$('#向上箭头'+id).remove();
$(“#下拉列表”+id).append(“”);
$(“#下拉列表”+id).append(“”);
}
//切换箭头
函数embiggen(id){
var up=$('#uparrow'+id).length;
如果(向上==1){
向下箭头(id);
console.log(我看到你了);
}
var down=$('#downarrow'+id).length;
如果(向下==1){
向上箭头(id);
}
}
错误的console.log()
使其“工作”,因为该错误在进入第二条if
语句之前中断了脚本的执行
解决真正的问题
down==1
始终为true
。您应该使用else
语句:
if ($('#uparrow'+id).length){
arrowdown(id);
} else if ($('#downarrow'+id).length){
arrowup(id);
}
理解它
down==1
始终为真,与up==1
无关。以下是两种情况下用伪代码解释的逻辑:
var up = 1, down = 0;
if (up) { down = 1; up = 0; } //enters this block, down now is 1
if (down) { down = 0; up = 1; } //enters this block as down == 1
您只是在其中放置了一个else
,以便在第一个if语句成功的情况下,执行流不会进入第二个if语句
if (up) {}
else if (down) {}
真/假价值观 为了解释我为什么在条件语句中使用隔离的
.length
:在JavaScript中,数字0
是一个虚假的值,1
是真实的,因此可以直接在if
语句中使用,并根据内部算法逻辑对其进行解释。显然,如果您愿意,您可以==1
,这一点虽然有点多余,但更清楚
一种可能更简单的方法 有点离题,但你的目标很可能以一种更容易的方式实现。我可能过于简化了您的逻辑,但根据您的意图,您可以在这两个类之间切换:
function embiggen(id) {
$('#arrow'+id).toggleClass('icon-chevron-up icon-chevron-down');
}
这样,每次调用函数时,就不必再创建一个新的#downarrow
/#uparrow
元素。如果所述箭头附加了JS行为,您可以使用If
语句检查要执行的逻辑。错误的console.log()
使其“起作用”,因为在输入第二个If
语句之前,错误会中断脚本执行
解决真正的问题
down==1
始终为true
。您应该使用else
语句:
if ($('#uparrow'+id).length){
arrowdown(id);
} else if ($('#downarrow'+id).length){
arrowup(id);
}
理解它
down==1
始终为真,与up==1
无关。以下是两种情况下用伪代码解释的逻辑:
var up = 1, down = 0;
if (up) { down = 1; up = 0; } //enters this block, down now is 1
if (down) { down = 0; up = 1; } //enters this block as down == 1
您只是在其中放置了一个else
,以便在第一个if语句成功的情况下,执行流不会进入第二个if语句
if (up) {}
else if (down) {}
真/假价值观 为了解释我为什么在条件语句中使用隔离的
.length
:在JavaScript中,数字0
是一个虚假的值,1
是真实的,因此可以直接在if
语句中使用,并根据内部算法逻辑对其进行解释。显然,如果您愿意,您可以==1
,这一点虽然有点多余,但更清楚
一种可能更简单的方法 有点离题,但你的目标很可能以一种更容易的方式实现。我可能过于简化了您的逻辑,但根据您的意图,您可以在这两个类之间切换:
function embiggen(id) {
$('#arrow'+id).toggleClass('icon-chevron-up icon-chevron-down');
}
这样,每次调用函数时,就不必再创建一个新的
#downarrow
/#uparrow
元素。如果所述箭头附加了JS行为,您可以通过If
语句检查要执行的逻辑。它可以工作,因为当发生错误时,JavaScript会跳过函数体的其余部分
本例中的问题是函数arrowdown()
创建#downarrow+id
,使下一个条件真实,并调用函数arrowdup()
您需要使用另一个分支,或者在对DOM进行更改后立即返回,否则会更改状态:
function embiggen(id) {
if ($('#uparrow'+id).length) {
return arrowdown(id);
}
if ($('#downarrow'+id).length) {
return arrowup(id);
}
// ehm, something else happened?
}
它之所以有效,是因为当发生错误时,JavaScript会跳过函数体的其余部分 本例中的问题是函数
arrowdown()
创建#downarrow+id
,使下一个条件真实,并调用函数arrowdup()
您需要使用另一个分支,或者在对DOM进行更改后立即返回,否则会更改状态:
function embiggen(id) {
if ($('#uparrow'+id).length) {
return arrowdown(id);
}
if ($('#downarrow'+id).length) {
return arrowup(id);
}
// ehm, something else happened?
}
那你自从结婚以来都做了些什么?这看起来基本上是一样的。我在上一个问题上得到的答案实际上是html问题,而不是js。。我需要把注意力集中在主要问题上。。我尝试了一大堆重写,但都没有用,其他问题中的所有建议都没有用。那么,自从你提出你的问题以来,你尝试了什么?这看起来基本上是一样的。我在上一个问题上得到的答案实际上是html问题,而不是js。。我需要把注意力集中在主要问题上。。我尝试了一大堆重写,但都没有用,还有其他问题中的所有建议。为什么投票被否决?使用
return
它将永远不会进入第二个if
语句。虽然我更喜欢你的第一个版本带有else
,+1作为替代方式=]
@fabriciomatté谢谢,但你已经有了else
,所以为了避免我们的答案看起来完全一样,我选择了一个替代方式:)为什么这被否决了?使用返回
它将永远不会得到