【问题标题】:Get Selected Text in Array获取数组中的选定文本
【发布时间】:2011-12-26 08:22:29
【问题描述】:

我有一个下拉菜单和一个文本框。当用户在下拉列表中选择任何选项时,它会更改文本框中的文本。我的问题是,如何在数组中获取选定的值并从数组中设置相应的文本?

我的代码是这样启动并运行的:

<select type="text" name="pipe_size" id="pipe_size">
    <option value="default_pipe_size" selected>PIPE SIZE</option>
    <option value="15">15</option>
    <option value="20">20</option>
    <option value="25">25</option>
    <option value="32">32</option>
    <option value="40">40</option>
</select>
<input type="text" name="bdmm" id="bdmm" />

JQUERY:

$('#pipe_size').change(function() {
    // update input box with the currently selected value

    if ( $("#pipe_size option:selected").text() == "15") {
        $('#bdmm').val("17.1");
    }
    if ( $("#pipe_size option:selected").text() == "20") {
        $('#bdmm').val("27.1");
    }
    if ( $("#pipe_size option:selected").text() == "25") {
        $('#bdmm').val("27.1");
    }
    if ( $("#pipe_size option:selected").text() == "32") {
        $('#bdmm').val("37.1");
    }
    if ( $("#pipe_size option:selected").text() == "40") {
        $('#bdmm').val("47.1");
    }
});

我认为 ^ 使用数组可以使这段代码更高效、更简洁。请大家指点一下?

【问题讨论】:

    标签: javascript arrays select jquery


    【解决方案1】:

    我假设您需要将“pipe_size”发送到服务器,否则您可以将数据存储在 value 属性中。如果是这样,您可以采取一些方法。从最不理想到最理想:

    1) 使用开关盒:

    $('#pipe_size').change(function() {
                    var val;
                    switch(this.value) {
                        case "15": val = "17.1"; break;
                        case "20": val = "27.1"; break;
                        case "25": val = "27.1"; break;
                        case "32": val = "37.1"; break;
                        case "40": val = "47.1"; break;
                        default:   val = "";     break;
                    }
                    $('#bdmm').val(val);
                });
    

    2) 使用对象:

    $('#pipe_size').change(function() {
                    var map = {
                        "15": "17.1",
                        "20": "27.1",
                        "25": "27.1",
                        "32": "37.1",
                        "40": "47.1"
                    };
                    $('#bdmm').val(map[this.value] || "");
                });
    

    3) 使用数据元素并将映射存储在数组中:

    <select type="text" name="pipe_size" id="pipe_size">
    <option value="default_pipe_size" selected>PIPE SIZE</option>
    <option value="15" data-bdmm="17.1">15</option>
    <option value="20" data-bdmm="27.1">20</option>
    <option value="25" data-bdmm="27.1">25</option>
    <option value="32" data-bdmm="37.1">32</option>
    <option value="40" data-bdmm="47.1">40</option>
    </select>
    <input type="text" name="bdmm" id="bdmm" />
    
    <script>
        $('#pipe_size').change(function() {
           $('#bdmm').val($("option:selected", this).data('bdmm'));
        });
    </script>
    

    【讨论】:

    • 为什么使用$("#pipe_size option:selected").text()?只需使用this.value (在您的示例中),您将是金色的^_^
    • 你是对的。我只是匆匆复制了这个问题。我会更新的。
    【解决方案2】:

    您可以使用查找对象 -

    var obj = new Object();
    obj['15'] = '17.1';
    obj['20'] = '27.1';
    //etc
    

    那么您的更改代码可以简化为 -

     $('#pipe_size').change(function() {
          // update input box with the currently selected value
          $('#bdmm').val(obj[this.value]);
     });
    

    【讨论】:

    • 为什么使用$("#pipe_size option:selected").text()?只需使用 this.value (在您的示例中),您将成为金色 ^_^
    • @Neal - 好点!我错过了,答案相应更新。
    【解决方案3】:

    如果价值观有些匹配,可能会让你的生活变得更好:

    HTML:

        <select type="text" name="pipe_size" id="pipe_size">
             <option value="default_pipe_size" selected>PIPE SIZE</option>
             <option value="17.1">15</option>
             <option value="27.1">20</option>
             <option value="27.1">25</option>
             <option value="37.1">32</option>
             <option value="47.1">40</option>
         </select>
         <input type="text" name="bdmm" id="bdmm" />
    

    JS:

            $('#pipe_size').change(function() {
                // update input box with the currently selected value
                $('#bdmm').val(this.value);
            });
    

    小提琴:http://jsfiddle.net/maniator/qRqLt/

    【讨论】:

      【解决方案4】:

      为什么不将值保存到变量中,而使用 switch 语句呢?

      $('#pipe_size').change(function() {
          var num = $(this).val();
      
          // update input box with the currently selected value
          switch(num) {
              case "15": $('#bdmm').val("17.1"); break;
              case "20": $('#bdmm').val("27.1"); break;
              case "25": $('#bdmm').val("27.1"); break;
              case "32": $('#bdmm').val("37.1"); break;
              case "40": $('#bdmm').val("47.1"); break;
          }
      });
      

      【讨论】:

      • 方法不错,但还是有太多的重复代码。只需存储一个新变量并在切换结束时执行$('#bdmm').val(myvar); 之类的操作。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-29
      • 1970-01-01
      • 1970-01-01
      • 2014-06-20
      • 2016-06-22
      • 2020-06-13
      • 1970-01-01
      相关资源
      最近更新 更多