在Javascript中切换bool值
这是一个奇怪的问题:我有一个只有true或false的HTML属性,我用Jquery获取它并将其转换为布尔值,然后我将其切换为相反的(true为false,false为true),然后我使用新的布尔值更改相同的HTML属性。
它首先工作,当原始attr值为false并且设置为true时,但不是相反:
现在是Js / Jquery
$(".toggle-search").click(function(){ var status = !$(this).attr("aria-checked"); // returns string, turn to bool $(this).attr("aria-checked",!status); $(this).children("span").html(!status); });
https://jsfiddle.net/kaqyhc48/4/
我不明白逻辑是怎么回事,新值是不是被解析为false,或者可能首先被解析为false然后被转换为true?
谢谢您的帮助
您必须将字符串解析为布尔值。 最简单的方法是value == "true"
,当字符串为"true"
时返回true
,否则返回false
。
要将其解析回字符串,您可以使用value ? "true" : "false"
value ? "true" : "false"
。
$(".toggle-search").click(function() { var status = $(this).attr("aria-checked") == "true"; status = !status; // returns string, turn to bool $(this).attr("aria-checked", status); $(this).children("span").html(status ? "true" : "false"); });
var status = !$(this).attr("aria-checked");
这不会将字符串转换为bool。 所以用var status = 'true'== $(this).attr("aria-checked");
替换它var status = 'true'== $(this).attr("aria-checked");
这会将字符串转换为bool。
并且.html(false)
将不会打印,因此请使用.html((false).toString())
$(".toggle-search").click(function(){ var status = 'true'== $(this).attr("aria-checked"); $(this).attr("aria-checked",!status); $(this).children("span").html((!status).toString()); });