2013-07-31 14 views
7

Tôi có một trang HTML, trong đó tôi có 2 select s.Cách thay đổi các tùy chọn của một lựa chọn bằng cách sử dụng JavaScript

<select id="field" name="field" onchange="checkValidOption();"> 
    <option /> 
    <option value="Plugin ID">Plugin ID</option> 
    <option value="Name">Name</option> 
</select> 
<select id="operator" name="operator" onchange="checkValidOption();"> 
    <option /> 
    <option value="EQUALS">EQUALS</option> 
    <option value="CONTAINS">CONTAINS</option> 
    <option value="NOT CONTAINS">NOT CONTAINS</option> 
    <option value="REGEX">REGEX</option> 
</select> 

Những gì tôi muốn xảy ra là checkValidOption() có thể làm cho nó để nếu "Plugin ID" được chọn trong lĩnh vực đó lựa chọn duy nhất là tương đương (và nó được chọn) và nếu không tất cả các tùy chọn khác có sẵn . Bất kỳ ý tưởng về cách tiếp cận này?

tôi đã cố gắng thay đổi innerHTML của người điều khiển chọn trong JS:

document.getElementById("operator").innerHTML = 
    "<option value='EQUALS'>EQUALS</option>"; 

Tuy nhiên kết quả này trong một sản phẩm nào select (điều này cũng sẽ bao gồm tự thiết lập nhiều option s cho sẽ trở lại có tất cả những người được liệt kê ở trên).

Tôi không thể nghĩ ra giải pháp khác, mọi trợ giúp sẽ được đánh giá cao.

+0

đọc Bạn nhận xét và cập nhật mã & demo – Sergio

Trả lời

4

Hãy thử điều này:

Demo here

var field = document.getElementById('field'); 
var operator = document.getElementById('operator'); 
field.onchange = function() { fieldcheck(); } 
operator.onchange = function() { fieldcheck(); } 
fieldcheck(); 

function fieldcheck() { 
    if (field.value == 'Plugin ID') { 
     for (i = 0; i < operator.options.length; ++i) { 
      if (operator.options[i].value != 'EQUALS') { 
       operator.options[i].disabled = true; 
      } 
     }; 
     operator.value = 'EQUALS'; 
    } else { 
     for (i = 0; i < operator.options.length; ++i) { 
      operator.options[i].disabled = false; 
     }; 
    } 
} 
0

Trường chọn không sử dụng phương pháp innerHTML, bạn cần sử dụng giá trị.

document.getElementById("operator").value = "..."; 
1

Để thao tác tùy chọn khi Plugin ID được chọn:

function checkValidOption(){ 
    var x=document.getElementById("field"); 
    var y=document.getElementById("operator"); 
    if (x.options[1].selected === true){ 
     document.getElementById("operator").options[1].selected = true; 
     for(var i=0; i<y.length; i++){ 
      if (i !== 1){ 
       //disabling the other options 
       document.getElementById("operator").options[i].disabled = true;  
      } 
     } 
    }  
    else{ 
     for(var i=0; i<y.length; i++){ 
      //enabling the other options 
      document.getElementById("operator").options[i].disabled = false;  
     } 
    } 
} 

Dưới đây là một link to fiddle

+0

Mã của bạn gần nhất với những gì tôi cần (khả năng tự động thay đổi các tùy chọn có sẵn) nhưng các vòng lặp của bạn đang ném các lỗi cú pháp (SyntaxError: missing; sau khi khởi tạo vòng lặp) tại nhiệm vụ ban đầu cho tôi. – avorum

+0

@avorum Xin lỗi - đã có lỗi :) giờ đã được sửa - xem mã cập nhật – alfasin

+0

Bây giờ tôi nhận được "document.getElementById (...). [I] là không xác định – avorum

-2

heres một giải pháp jquery.

mỗi khi lựa chọn đầu tiên thay đổi, nó sẽ tạo ra các tùy chọn mới từ một mảng cho lựa chọn thứ 2. Vấn đề ở đây là tôi đã phải thay đổi các giá trị tùy chọn đầu tiên chọn 0 và 1 để chọn giá trị trong mảng, bạn có thể thao tác những sau này nếu bạn đang lưu trữ thông tin này ở đâu đó

http://jsfiddle.net/2TZJh/

$(document).ready(function() { 

    $("#field").change(function() { 
     var val = $(this).val(); 
     $("#operator").html(options[val]); 
    }); 
     var options = [ 

     '<option value="EQUALS">EQUALS</option>', 
     '<option></option><option value="EQUALS">EQUALS</option><option value="CONTAINS">CONTAINS</option> <option value="NOT CONTAINS">NOT CONTAINS</option>  <option value="REGEX">REGEX</option>' 

    ]; 

    }); 
+0

bất cứ ai downvoted, chăm sóc để giải thích lý do tại sao? Nó chính xác những gì OP hỏi ... không có ai trong số những người khác làm ... – robz228

+2

Tôi không muốn JQuery, tôi muốn Vanilla Javascript. – avorum

+1

Đó có lẽ là lý do tại sao một người nào đó bị downvoted, giống như câu trả lời dưới đây – avorum