我试图根据前两个字段的值来控制隐藏的输入值。我在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">
答案 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
语句都不执行任何操作。