Jquery - 开关&&不工作?

时间:2011-04-20 21:16:19

标签: jquery switch-statement

我试图根据前两个字段的值来控制隐藏的输入值。我在switch语句中取得了一些成功,但我似乎无法让它完全正常工作。我想要测试的是测试用户是否在#state字段中输入了CA或NV,如果他们这样做,并且他们选择了选项值auto,则#ins_link值将分别更改为CA或NV。我在这做错了什么?以下是我的工作内容:

<input class="statefield isstate" name="state" id="state" maxlength="2" onkeyup="this.value=this.value.toUpperCase();">

<select class="input_field_12em required" name="ins_type" id="ins_type">
                                            <option value="" selected="selected" >---Select Insurance Type---</option>

                    <option value="home">Home</option>
                    <option value="auto">Auto</option>
                    <option value="homeauto">Home + Auto</option>
                    <option value="renter">Renter</option>
                    <option value="buildingowner">Building Owner</option>
                    <option value="dwellingfire">Dwelling Fire</option>
                    <option value="commercial">Commercial</option>
                    <option value="agricultural">Agricultural</option>
                </select>       


$(function() {
    $('#ins_type').change(function() {
        switch (this.value) {
           case 'auto':
           if ($("#state[CA]" && "#ins_type[auto]"))
              $(".ins_link").val("CA"); 
              break;
            case 'auto':
           if ($("#state[NV]" && "#ins_type[auto]"))
              $(".ins_link").val("NV"); 
           default :
              $(".ins_link").val("summary");
           break; 
        }
    });
});

<input type="hidden" class="link ins_link" value="summary">

3 个答案:

答案 0 :(得分:2)

解决问题的实际方法是

$(function () {
    $('#ins_type').change(function() {
        if (this.value === "auto") {
            var state = $("#state").val();

            if (state === "CA" || state === "NV") {
                $(".ins_link").val(state);
            } else {
                $(".ins_link").val("summary");
            }
        }
    });
});

您是否看到此代码实际上如何反映您的要求?

  • 如果#ins_type的值为“自动”:
    • 如果#state的值为“CA”或“NV”,请将.ins_link的值设置为所选的状态。
    • 否则,请将.ins_link的值设为“摘要”。

您的代码结构应该反映您的思维结构。

答案 1 :(得分:1)

       if ($("#state[CA]" && "#ins_type[auto]"))

这是两个字符串的逻辑AND,然后将其结果用作页面中元素的选择器。这不起作用。

您的示例代码未显示存储状态信息的位置/方式,但您需要更多类似的内容:

case 'auto':
    if ($('#state').val() == 'CA') {
        ... do california stuff ...
    }
    if ($('#state').val() == 'NV') {
        ... do nevada stuff ...
    }
    break;

在内部if()内再次检查“自动”选择是多余的,因为您已使用switch()将其强制为“自动”。

答案 2 :(得分:0)

你对JavaScript和jQuery如何在这里工作有一些误解。

"#state[CA]"只是一个字符串,"#ins_type[auto]"

也是如此

"#state[CA]" && "#ins_type[auto]"将这些字符串转换为bool,然后询问它们是否都是真的。只有空字符串转换为false,因此逻辑是:

"#state[CA]" && "#ins_type[auto]" === true && true === true

然后用$函数调用来包装它,它只是将其参数转换为jQuery对象。所以

$("#state[CA]" && "#ins_type[auto]") === $(true) = $()

即。你只得到了空的jQuery对象,因为你没有传递选择器或DOM元素。

如果您使用null测试任何非undefined,非if对象,则会将其转换为bool,因此您获得if(true)

    if ($("#state[CA]" && "#ins_type[auto]"))
<=> if ($())
<=> if (true)

同样的逻辑适用于您的第二个if语句,因此两个if语句都不执行任何操作。