这是我的webapp的html片段。 我试图根据.commtype的选择更改.commmethod的选定值,但所有常用技术对我不起作用。
html片段下方是我的jquery。
<div class="form-group">
<div class="col-sm-4">
<select style="display: none;" class="combobox form-control chzn-done" id="commtype" name="CommunicationTypeId">
<option value="-1">Select one...</option>
<option value="401">Phone</option>
<option value="403">Fax</option>
<option value="404">Email</option>
<option value="402">Postal</option>
</select>
<div style="width: 513px;" class="chzn-container chzn-container-single" id="commtype_chzn">
<a href="javascript:void(0)" class="chzn-single" tabindex="-1">
<span>Select one...</span>
</a>
<div class="chzn-drop" style="left: -9000px; width: 511px; top: 43px;">
<ul class="chzn-results">
<li id="commtype_chzn_o_0" class="active-result result-selected" style="">Select one...</li>
<li id="commtype_chzn_o_1" class="active-result" style="">Phone</li>
<li id="commtype_chzn_o_2" class="active-result" style="">Fax</li>
<li id="commtype_chzn_o_3" class="active-result" style="">Email</li>
<li id="commtype_chzn_o_4" class="active-result" style="">Postal</li>
</ul>
</div>
</div>
</div>
<div class="form-group">
<div class="col-sm-4">
<select style="display: none;" class="combobox form-control chzn-done" id="commmethod" name="CommunicationMethodId">
<option value="-1">Select one...</option>
<option value="2">Slow</option>
<option value="5">Fast</option>
<option value="4">Fasted</option>
<option value="1">Slowest</option>
<option value="3">Slower</option>
</select>
<div style="width: 513px;" class="chzn-container chzn-container-single" id="commmethod_chzn">
<a href="javascript:void(0)" class="chzn-single" tabindex="-1">
<span>Select one...</span>
</a>
<div class="chzn-drop" style="left: -9000px; width: 511px; top: 43px;">
<ul class="chzn-results">
<li id="commmethod_chzn_o_0" class="active-result result-selected" style="">Select one...</li>
<li id="commmethod_chzn_o_1" class="active-result" style="">Slow</li>
<li id="commmethod_chzn_o_2" class="active-result" style="">Fast</li>
<li id="commmethod_chzn_o_3" class="active-result" style="">Fasted</li>
<li id="commmethod_chzn_o_4" class="active-result" style="">Slowest</li>
<li id="commmethod_chzn_o_5" class="active-result" style="">Slower</li>
</ul>
</div>
</div>
Jquery代码确实设置了commmethod的选定值,但是,它不会更改表单提交验证期间条目所需的其他值。 (请参阅jquery之后的片段)
<script type="text/javascript">
$("#commtype").change(function () {
//I do get the correct selected value here
var theselected = $('#commtype >option:selected').text();
switch (theselected) {
case "Phone":
$("#commmethod").val(2);
break;
case "Fax":
$("#commmethod").val(5);
break;
case "Email":
$('#commmethod').val(4);
break;
case "Postal":
$('#commmethod').val(1);
break;
default:
$('#commmethod').val(1);
break;
}
$("#commmethod").trigger("liszt:updated");
});
</script>
所以,如果我在切换后输出#commmethod.val我得到了我想要的值,但是上面html中的以下元素(用---&gt;标记)不会根据需要更新...
<div style="width: 513px;" class="chzn-container chzn-container-single" id="commmethod_chzn">
<a href="javascript:void(0)" class="chzn-single" tabindex="-1">
---> <span>Select one...</span>
</a>
<div class="chzn-drop" style="left: -9000px; width: 511px; top: 43px;">
<ul class="chzn-results">
<li id="commmethod_chzn_o_0" class="active-result result-selected" style="">Select one...</li>
---> <li id="commmethod_chzn_o_1" class="active-result" style="">Slow</li>
<li id="commmethod_chzn_o_2" class="active-result" style="">Fast</li>
<li id="commmethod_chzn_o_3" class="active-result" style="">Fasted</li>
<li id="commmethod_chzn_o_4" class="active-result" style="">Slowest</li>
<li id="commmethod_chzn_o_5" class="active-result" style="">Slower</li>
</ul>
</div>
</div>
如果我使用其下拉列表在commmethod上进行选择,则上面的内容会更新为该值,并且所选择的commmethod列表项的类将附加结果选择。
*****更新***** 结果是jquery选择的插件正在对事件进行更新。研究stackoverflow以正确更新下拉列表,尚未找到解决方案。
我感谢任何帮助。谢谢。
答案 0 :(得分:1)
我认为您正在寻找类似的内容。
$("#commtype").change(function () {
var theselected = $('option:selected', this).text();
switch (theselected) {
case "Phone":
$("#commmethod").val(2);
case "Fax":
$("#commmethod").val(5);
case "Email":
$("#commmethod").val(4);
case "Postal":
$("#commmethod").val(1);
default:
$("#commmethod").val(-1);
}
$("#commmethod").trigger("liszt:updated"); //to update chosen select
});
答案 1 :(得分:1)
尝试使用Developer工具获取值。
$('#commmethod').val();
应返回预期值,但值未在页面上正确显示。通常,如果控件未正确刷新。
设置值后,尝试添加此项
$("#commmethod").val('whatever').trigger("liszt:updated");
$("#commmethodSimple").val('whatever').trigger('change');
$.uniform.update();
答案 2 :(得分:0)
这样做
<script type="text/javascript">
$("#commtype").change(function () {
//I do get the correct selected value here
var theselected = $('#commtype >option:selected').text();
switch (theselected) {
case "Phone":
$("#commdetail").val(2);
case "Fax":
$("#commdetail")val(1);
case "Email":
$('#commdetail').val(5);
case "Postal":
$('#commdetail').val(4);
default:
}
});
</script>
答案 3 :(得分:0)
在完成所有建议(谢谢大家)和进一步的stackoverflow研究之后,我找到了解决我的特定问题的方法。
虽然下面的代码段不会更新下拉列表的选择选项,但它不需要。它会更新所选的值,然后在表单提交时验证并保存。
新jquery ......
$("#commtype").change(function () {
var theselected = $('#commtype >option:selected').text();
switch (theselected) {
case "Phone":
$('#commmethod').val(2);
break;
case "Fax":
$('#commmethod').val(5);
break;
case "Email":
$('#commmethod').val(4);
break;
case "Postal":
$('#commmethod').val(1);
break;
default:
$('#commmethod').val(-1);
break;
}
$('#commmethod').chosen().change();
$("#commmethod").trigger("liszt:updated");
});