为什么我的if-else语句没有正确执行

Why is my if-else statement not executing correctly?

本文关键字:执行 我的 if-else 语句 为什么      更新时间:2023-09-26

我有一个问题,为什么我的if-else语句不工作。

我得到了一个带有文本输入的表单,当用户输入他们想要的大小时,它应该实时编辑图片。我使用的addclass和removeclass方法从jQuery。这是我的脚本:

function slide() {
    var n = Number(document.getElementById('Getal1').value)
    if (n >= 101 && n < 201)
        $(openDiv1());
    else if(n > 200)
        $(openDiv2());
    else if(n >= 0 && n < 101)
        $(closeDiv());
    else {
        alert("You did not enter a number!")
    }
}
$(function openDiv1() {
    $( "#ombouw_wrap" ).addClass( "Addclass_ombouw_wrap_2block", 1, callback );
    return false;
});
function callback() {
    setTimeout(function() {
        $( "#midden" ).removeClass( "Addclass_ombouw_wrap_1block Addclass_ombouw_wrap_3block" );
    }, 0 );
}
$(function openDiv2() {
    $( "#ombouw_wrap" ).addClass( "Addclass_ombouw_wrap_3block", 1, callback );
    return false;
});
function callback() {
    setTimeout(function() {
        $( "#midden" ).removeClass( "Addclass_ombouw_wrap_1block Addclass_ombouw_wrap_2block" );
    }, 0 );
}
$(function closeDiv() {
    $( "#ombouw_wrap" ).addClass( "Addclass_ombouw_wrap_1block", 1, callback );
    return false;
});
function callback() {
    setTimeout(function() {
        $( "#midden" ).removeClass( "Addclass_ombouw_wrap_2block Addclass_ombouw_wrap_3block" );
    }, 0 );
}
window.onload = closeDiv;
这是我的HTML代码:
Lengte: <INPUT TYPE="text" NAME="numeric" onKeyup="slide()" id="Getal1" onKeyPress="return checkIt(evt)">
x Hoogte: <input type="text" ID="Getal2" onKeyPress="return checkIt(evt)">
x Diepte: <input type="text" ID="Getal3" onKeyPress="return checkIt(evt)">
</form>

当您重新加载页面时,您会看到它不是从closediv开始,而是直接从添加类开始,而不执行if-else语句。

我在这里做错了什么?

当您重新加载页面时,您会看到它不是从closediv开始,而是直接从添加类开始,而不执行if-else语句。

这是因为jQuery将$(function)视为$.ready(function)的方便形式:传递的函数对象在页面加载时执行

也就是说,$(function openDiv1() {...})定义了一个函数对象,然后传递给jQuery,在页面加载时自动执行。相反,从$(...)中删除这些函数。例如,function openDiv1() {...}就足够了。(这也将修复无法调用openDiv1的错误——因为它是一个函数表达式,它不会被赋值给作用域中的变量/属性。)


下面描述了slide函数的一个问题。

JavaScript做一些强制;下面显示了为什么永远无法到达else分支:

Number("")         // same as Number(0)
Number("") >= 0    // true

但是,真的,请不要使用Number(它是number的包装对象),考虑parseInt(str, 10)作为替代品。作为额外的奖励,parseInt("", 10)的计算结果为NaN(不是0),并且由于NaN >= 0为假,这将解决初始问题。

function slide(){
    var n = parseInt(document.getElementById('Getal1').value, 10)
    if (n >= 0 && n <= 100) {
        $(closeDiv())
    } else if (n > 100 && n <= 200) {
        $(openDiv1())
    } else if (n > 200) {
        $(openDiv2())
    } else {
        alert("You did not enter a number!")
    }
}

还要注意我添加的一致性更改。括号不是必需的,但我发现它有助于以一致的格式良好/缩进良好的样式编写。其他需要注意的事情是if/else语句的顺序以及比较(保持"流畅")。

快乐编码。

你在$()中包装你的函数,当你试图定义它们时,它将执行它们…

// alerts 1
$(function myFunc(){ alert(1) })

你需要在if/else语句之前定义函数,就像这样…

// does not execute until called
function myFunc(){ ... }

我不是Javascript程序员,但我相信您在IF/ELSE语句上缺少一些大括号。根据W3,正确的语法应该是:

if (condition1){
    Handle condition1
    }
else if (condition2){
    Handle condition2
    }
else{
    Handle the rest
    }

当然,如果不是这种情况,并且不需要大括号,那么我希望其他人可以帮助你:)。