以下是rails应用程序中的jquery代码。该代码的目的是评估#rfq_need_report的值,如果need_report为true则显示#rfq_report_language:
$(document).ready(function() {
var rpt = $('#rfq_need_report').val();
alert(rpt);
if (rpt) {
alert(rpt);
$('#rfq_report_language').show();
alert('show');
} else {
$('#rfq_report_language').hide();
alert(rpt);
alert('hide');
}
}); // end ready
此处的警报仅用于调试。rpt为false,但是alert("ow")被执行。if循环似乎为false,并决定执行true循环。有时如果循环工作,有时则不工作。是什么导致了这种奇怪的行为?谢谢
在HTML中,任何输入(如value="something"
)的值字段总是作为字符串计算。我的猜测是,在javascript中,您可以将该值设置为true或false,但实际上它被设置为字符串形式的"true"或"false"。您可以试试这个主题的答案:如何在JavaScript中将字符串转换为布尔值?
rpt可能是一个字符串,因此将其转换为布尔值将有所帮助:
if(rpt === "false") { rpt = false; } else { rpt = true; }
我必须假设$('#rfq_need_report').val()
不是在传递实际的布尔值,而是JavaScript认为的"truthy",这就是为什么if语句执行truth子句的原因。
有两种快速方法(我使用)可以将"truthy"值转换为实际布尔值:
1:var bool = !!truthy;
2:var bool = truthy === 'true'
当需要字符串值时使用第二个,当不需要字符串时使用第一个。
第一个例子可能需要解释,所以…
第一个!"not"将truthy值转换为实际布尔值,尽管与我想要的相反,第二个"not"则将其返回到应有的位置。
要了解更多truthy vs falsy的例子,只需将javascript truthy falsy
放入你最喜欢的搜索引擎并开始阅读。我个人的快速参考是:JavaScript 中的Truthy和falsy