Javascript 三元运算符未按预期工作
Javascript ternary operator not working as expected
我正经历着最简单的逻辑不起作用的日子……
当我点击 link(id=show-additional-info
)显示隐藏内容时,我试图切换图标的 class:
$(document).ready(function(){
$("#show-additional-info").on('click', function () {
console.log('---------------');
var iconToggle = $('#additional-info').attr("aria-expanded");
var active_icon = iconToggle
? 'fa fa-chevron-circle-right'
: 'fa fa-chevron-circle-down';
$('#icon-toggle').attr("class", active_icon);
// show state of trigger event, ternary operator, and affected element class
console.log('additional-info.aria-expanded: ' + iconToggle);
console.log('active_icon: ' + active_icon);
console.log('icon-toggle.class: ' + $('#icon-toggle').attr("class"));
});
});
控制台日志显示第一个状态为未定义,这是预期的,应该是假的。通过反复点击,我看到 aria-expanded
属性在 true 和 false 之间切换状态。但是三元运算符没有像我期望的那样赋值:
---------------
additional-info.aria-expanded: undefined
active_icon: fa fa-chevron-circle-down // <-- correctly assigns state.
icon-toggle.class: fa fa-chevron-circle-down
---------------
additional-info.aria-expanded: true
active_icon: fa fa-chevron-circle-right // <-- correctly changes state.
icon-toggle.class: fa fa-chevron-circle-right
---------------
additional-info.aria-expanded: false
active_icon: fa fa-chevron-circle-right // <-- should be circle down!
icon-toggle.class: fa fa-chevron-circle-right
---------------
additional-info.aria-expanded: true
active_icon: fa fa-chevron-circle-right
icon-toggle.class: fa fa-chevron-circle-right
---------------
additional-info.aria-expanded: false
active_icon: fa fa-chevron-circle-right // <-- should be circle down!
icon-toggle.class: fa fa-chevron-circle-right
html 部分按预期工作,似乎没有涉及这种意外行为,但为了完整起见,这里是:
<i id="icon-toggle" class="fa fa-chevron-circle-right" aria-hidden="true"></i> <a id="show-additional-info" href="#additional-info" data-toggle="collapse">Additional Batch Info</a><br><br>
<div>
<ul id="additional-info" class="list-unstyled collapse">
<!-- stuff... --->
</ul>
</div>
对于我来说,我看不出我在使用三元运算符时做错了什么。另一组眼睛将不胜感激!
您是否考虑过使用 toggleClass()
方法使它变得更简单?
$(document).ready(function(){
$("#show-additional-info").on('click', function () {
$("#icon-toggle").toggleClass("fa-chevron-circle-right fa-chevron-circle-down")
});
});
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<i id="icon-toggle" class="fa fa-chevron-circle-right" aria-hidden="true"></i>
<a id="show-additional-info" href="#additional-info" data-toggle="collapse">Additional Batch Info</a>
<br><br>
<div>
<ul id="additional-info" class="list-unstyled collapse">
<!-- stuff... --->
</ul>
</div>
我发布问题后不久,答案打动了我:
'false' == true
我以为我在测试一个布尔值,但它实际上是一个字符串。我将代码更改为
var active_icon = iconToggle == 'true'
? 'fa fa-chevron-circle-right'
: 'fa fa-chevron-circle-down';
它按预期工作。
然而,更好的答案是不要重新发明轮子,正如公认的答案所示:
$("#icon-toggle").toggleClass("fa-chevron-circle-right fa-chevron-circle-down")
我正经历着最简单的逻辑不起作用的日子……
当我点击 link(id=show-additional-info
)显示隐藏内容时,我试图切换图标的 class:
$(document).ready(function(){
$("#show-additional-info").on('click', function () {
console.log('---------------');
var iconToggle = $('#additional-info').attr("aria-expanded");
var active_icon = iconToggle
? 'fa fa-chevron-circle-right'
: 'fa fa-chevron-circle-down';
$('#icon-toggle').attr("class", active_icon);
// show state of trigger event, ternary operator, and affected element class
console.log('additional-info.aria-expanded: ' + iconToggle);
console.log('active_icon: ' + active_icon);
console.log('icon-toggle.class: ' + $('#icon-toggle').attr("class"));
});
});
控制台日志显示第一个状态为未定义,这是预期的,应该是假的。通过反复点击,我看到 aria-expanded
属性在 true 和 false 之间切换状态。但是三元运算符没有像我期望的那样赋值:
---------------
additional-info.aria-expanded: undefined
active_icon: fa fa-chevron-circle-down // <-- correctly assigns state.
icon-toggle.class: fa fa-chevron-circle-down
---------------
additional-info.aria-expanded: true
active_icon: fa fa-chevron-circle-right // <-- correctly changes state.
icon-toggle.class: fa fa-chevron-circle-right
---------------
additional-info.aria-expanded: false
active_icon: fa fa-chevron-circle-right // <-- should be circle down!
icon-toggle.class: fa fa-chevron-circle-right
---------------
additional-info.aria-expanded: true
active_icon: fa fa-chevron-circle-right
icon-toggle.class: fa fa-chevron-circle-right
---------------
additional-info.aria-expanded: false
active_icon: fa fa-chevron-circle-right // <-- should be circle down!
icon-toggle.class: fa fa-chevron-circle-right
html 部分按预期工作,似乎没有涉及这种意外行为,但为了完整起见,这里是:
<i id="icon-toggle" class="fa fa-chevron-circle-right" aria-hidden="true"></i> <a id="show-additional-info" href="#additional-info" data-toggle="collapse">Additional Batch Info</a><br><br>
<div>
<ul id="additional-info" class="list-unstyled collapse">
<!-- stuff... --->
</ul>
</div>
对于我来说,我看不出我在使用三元运算符时做错了什么。另一组眼睛将不胜感激!
您是否考虑过使用 toggleClass()
方法使它变得更简单?
$(document).ready(function(){
$("#show-additional-info").on('click', function () {
$("#icon-toggle").toggleClass("fa-chevron-circle-right fa-chevron-circle-down")
});
});
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<i id="icon-toggle" class="fa fa-chevron-circle-right" aria-hidden="true"></i>
<a id="show-additional-info" href="#additional-info" data-toggle="collapse">Additional Batch Info</a>
<br><br>
<div>
<ul id="additional-info" class="list-unstyled collapse">
<!-- stuff... --->
</ul>
</div>
我发布问题后不久,答案打动了我:
'false' == true
我以为我在测试一个布尔值,但它实际上是一个字符串。我将代码更改为
var active_icon = iconToggle == 'true'
? 'fa fa-chevron-circle-right'
: 'fa fa-chevron-circle-down';
它按预期工作。
然而,更好的答案是不要重新发明轮子,正如公认的答案所示:
$("#icon-toggle").toggleClass("fa-chevron-circle-right fa-chevron-circle-down")