Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中的条件_Javascript_Jquery - Fatal编程技术网

javascript中的条件

javascript中的条件,javascript,jquery,Javascript,Jquery,我有一个奇怪的问题:我的条件在javascript中不起作用:/ 这是我的代码: var myposition = $("#audioWelcome").data("myposition"); /* condition */ if (myposition == "true") { .... } 不正确吗?参见我的示例:条件不起作用,html();或数据();不太管用 什么不正确?删除了双引号: if (myposition == true) { 更新的JSFilddle位于: 更新:

我有一个奇怪的问题:我的条件在javascript中不起作用:/

这是我的代码:

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”
?是的,我添加了,请查看小提琴。或者,使用DOM
getAttribute()
而不是jQuery
data()
,这不会试图聪明地将您的值转换为非字符串。这只在第一次使用时有效,而不是一个可用的小提琴。您的意思是什么?它会切换。但是在您切换几次之后,它会被卡在“cacher le lector”上。这是因为
true!='true“
要使其工作,还必须更改设置的布尔值,而不是字符串。我明白了。我没有注意字符串中的法语单词,这些单词在说英语的人看来似乎是一样的:)但是,即使设置了
$('#audioWelcome')。数据('myposition','false')。您确实注意到该值是
'true'
(一个字符串)而不是
true
(一个布尔值),是吗?但是如果我有其他参数而不是true或false?我希望它像字符串一样,而不是布尔值。我会避免使用“true”作为字符串值。在javascript控制台中键入:var x=“true”;控制台日志(x);你得到的是真的而不是“真的”。它似乎自动强制您输入该类型。这就是你有问题的原因。另外,使用“true”作为字符串与我认为最好的做法相反,这只是Chrome如何决定打印字符串。改用Firefox或trye
var x=“foo”;控制台日志(x)(它打印
foo
,不带引号)。JavaScript不会将字符串
“true”
强制为布尔值
true
。这(fiddle)在移动设备上不起作用的任何原因。我无法在我的chrome平板电脑上运行此功能