无法更改使用所选插件的html中的下拉列表选择

时间:2016-07-29 17:21:46

标签: javascript jquery jquery-chosen prototype-chosen

这是我的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以正确更新下拉列表,尚未找到解决方案。

我感谢任何帮助。谢谢。

4 个答案:

答案 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");
 });