javascript中的条件
我有一个奇怪的问题:我的条件在javascript中不起作用:/ 这是我的代码:javascript中的条件,javascript,jquery,Javascript,Jquery,我有一个奇怪的问题:我的条件在javascript中不起作用:/ 这是我的代码: var myposition = $("#audioWelcome").data("myposition"); /* condition */ if (myposition == "true") { .... } 不正确吗?参见我的示例:条件不起作用,html();或数据();不太管用 什么不正确?删除了双引号: if (myposition == true) { 更新的JSFilddle位于: 更新:
var myposition = $("#audioWelcome").data("myposition");
/* condition */
if (myposition == "true") {
....
}
不正确吗?参见我的示例:条件不起作用,html();或数据();不太管用
什么不正确?删除了双引号:
if (myposition == true) {
更新的JSFilddle位于:
更新:
if (myposition == true) {
$(this).html("afficher le lecteur");
$('#audioWelcome').data('myposition', false);
} else {
$(this).html("cacher le lecteur");
$('#audioWelcome').data('myposition', true);
};
更新提琴网址:
最好不要使用==true。人们不会认为你是一个VB5开发人员
if (myposition){}
好问题
当设置为属性时,javascript似乎混淆了“真”和“假”值
@Kyo建议删除双引号,这在一定程度上是有效的。单击3次后,代码将按预期停止运行
@user3391179的解决方案似乎根本不起作用
在$(“#audioWelcome”).data(“myposition”)
上使用toString
方法将使“true”/“false”(字符串)值按预期工作
代码:
var myposition = $("#audioWelcome").data("myposition").toString();
/* changements via onclick */
if (myposition == "true") {
$(this).html("afficher le lecteur");
$('#audioWelcome').data('myposition', false);
} else if (myposition == "false") {
$(this).html("cacher le lecteur");
$('#audioWelcome').data('myposition', true);
};
演示:回答您的问题:
if (myposition == "true") {
无法按预期工作,因为myposition
是布尔值true
,它不等于字符串值“true”
您可能想知道为什么myposition
是一个布尔值。这是因为jQuery:
每次尝试都会将字符串转换为JavaScript值(包括布尔值、数字、对象、数组和null)
因此,您真正需要做的就是更改代码以设置布尔值而不是字符串,并相应地调整条件:
if (myposition) {
$(this).html("afficher le lecteur");
$('#audioWelcome').data('myposition', false);
} else {
$(this).html("cacher le lecteur");
$('#audioWelcome').data('myposition', true);
}
或更短:
$(this).html(myposition ? "afficher le lecteur" : "cacher le lecteur");
$('#audioWelcome').data('myposition', !myposition);
您是否在selector元素中添加了attr
data myposition=“true”
?是的,我添加了,请查看小提琴。或者,使用DOMgetAttribute()
而不是jQuerydata()
,这不会试图聪明地将您的值转换为非字符串。这只在第一次使用时有效,而不是一个可用的小提琴。您的意思是什么?它会切换。但是在您切换几次之后,它会被卡在“cacher le lector”上。这是因为true!='true“
要使其工作,还必须更改设置的布尔值,而不是字符串。我明白了。我没有注意字符串中的法语单词,这些单词在说英语的人看来似乎是一样的:)但是,即使设置了$('#audioWelcome')。数据('myposition','false')代码>。您确实注意到该值是'true'
(一个字符串)而不是true
(一个布尔值),是吗?但是如果我有其他参数而不是true或false?我希望它像字符串一样,而不是布尔值。我会避免使用“true”作为字符串值。在javascript控制台中键入:var x=“true”;控制台日志(x);你得到的是真的而不是“真的”。它似乎自动强制您输入该类型。这就是你有问题的原因。另外,使用“true”作为字符串与我认为最好的做法相反,这只是Chrome如何决定打印字符串。改用Firefox或tryevar x=“foo”;控制台日志(x)代码>(它打印foo
,不带引号)。JavaScript不会将字符串“true”
强制为布尔值true
。这(fiddle)在移动设备上不起作用的任何原因。我无法在我的chrome平板电脑上运行此功能