Javascript 奇怪的jQuery行为

Javascript 奇怪的jQuery行为,javascript,jquery,Javascript,Jquery,我知道$SendingType.val2将select的值设置为2 那么,为什么这会转到其他地方呢 $(function () { $("#calculate").click(function () { var result = $("#SendingType").val(); var day1 = eval(result) + 3; var day2 = eval(result) + 10; var day3 = eval

我知道$SendingType.val2将select的值设置为2

那么,为什么这会转到其他地方呢

$(function () {
    $("#calculate").click(function () {
        var result = $("#SendingType").val();
        var day1 = eval(result) + 3;
        var day2 = eval(result) + 10;
        var day3 = eval(result) + 2;
        if ($("#SendingType").val(2)) {
            $("#result").text(day1 + " and " + day2 + " days.");
        } else {
            $("#result").text(day1 + " and " + day3 + " days.");
        }
    });
});
我知道这不是编写if语句的正确方法

解决方法:谢谢杰森和朱哈娜。代码不会转到else,我认为会,因为select的值会影响if结果。总是如果,但由于新的选择值,结果不同


在我看来,它运行的是真正的分支:


这是有道理的。您正在将该值设置为2,而不是检查该值。语句$SendingType.val2返回一个jQuery对象,它是truthy。

在我看来,它运行的是真正的分支:


这是有道理的。您正在将该值设置为2,而不是检查该值。语句$SendingType.val2返回一个jQuery对象,它是truthy。

不是。它在计算后将值设置为2,这可能会让您感到困惑?实际使用“$SendingType.val==2”来检查条件?@bfavaretto,是的,它设置了值,但是$result.text根据所选内容不同而不同。旁注:这里完全不需要eval。使用parseInt result,10代替。@Juhana,是的,谢谢。我只是把我的代码简化成这个例子,并把它放在这里。它在计算后将值设置为2,这可能会让您感到困惑?实际使用“$SendingType.val==2”来检查条件?@bfavaretto,是的,它设置了值,但是$result.text根据所选内容不同而不同。旁注:这里完全不需要eval。使用parseInt result,10代替。@Juhana,是的,谢谢。我只是把我的代码简化成这个例子,并把它放在这里。你怎么解释我是从其他人那里得到内容的?我想你不会的。看看my fiddle,它会记录两个选项的true分支的输出。@Sergio您原来的fiddle不会显示else分支的内容。我得到5天和12天,这是第1天和第2天的值。@Juhana,Jason。。。很抱歉正在根据“选择…”的值更改文本。。。所以它改变了第1-3天的值,并且总是通过if,而不是else。这是一个否定的问题。@Sergio是的,这个答案解释了原因。如果我理解正确,您想要$SendingType.val2;如果结果===2{…下拉列表的原始值是result。你如何解释我从else得到的内容?我想你不会。看看我的fiddle,它记录了两个选项的true分支的输出。@Sergio你的原始fiddle没有显示else分支的内容。我得到5天和12天,这是第1天和第2天的值。@Juhana,Jason。…抱歉..文本正在根据select的值进行更改…因此它会更改第1-3天的值,并始终通过if,而不是else。这是一个“否”问题。@Sergio Yes,此答案解释了原因。如果我正确理解您想要$SendingType.val2;if result==2的目的是什么{…下拉列表的原始值为result。