2011-11-10 80 views
1

我有一個下拉菜單和一個文本框。當用戶在下拉菜單中選擇任何選項時,它將更改文本框中的文本。我的問題是,如何獲得數組中的選定值並從數組中設置相應的文本?在數組中獲取所選文本

我的代碼運行起來是這樣的:

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

我覺得^這段代碼可以更高效,更清潔與使用陣列。任何指針,請?

回答

4

它可能會讓你的生活變得更好,如果值有所匹配:

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:

​​

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

2

爲什麼不將值保存到變量中,而是使用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; 
    } 
}); 
+0

好的方法,但仍然太多重複的代碼。只需存儲一個新變量,並在交換機末尾執行'$('#bdmm')。val(myvar);'等操作。 – Blazemonger

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]); 
}); 
+0

爲什麼使用'$(「#pipe_size選項:選中」).text()'?只需使用this.value(在你的例子中),你將成爲金牌^ _^ – Neal

+0

@Neal - 優秀點!我錯過了,回答相應更新。 – ipr101

3

我假設你需要發送「PIPE_SIZE」到服務器,否則你只能將數據存儲在值屬性中。如果是這樣,你可以採取一些方法。從最低到最高期望:

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> 
+0

爲什麼使用'$(「#pipe_size選項:選中」).text()'?只需使用'this.value'(在你的例子中),你就會變成金色的^ _^ – Neal

+0

你是對的。我只是草草複製了這個問題。我會更新。 –

+0

大膽的標題是驚人的巨大,我向你保證。 –