How can I disable an

后端 未结 6 1347
囚心锁ツ
囚心锁ツ 2020-11-27 16:13

I have a

提交评论

  • 2020-11-27 16:56
    var vals = new Array( 2, 3, 5, 8 );
    select_disable_options('add_reklamaciq_reason',vals);
    select_disable_options('add_reklamaciq_reason');
    
    function select_disable_options(selectid,vals){
      var selected = false ;
      $('#'+selectid+' option').removeAttr('selected');
      $('#'+selectid+' option').each(function(i,elem){
           var elid = parseInt($(elem).attr('value'));
           if(vals){
               if(vals.indexOf(elid) != -1){
                   $(elem).removeAttr('disabled');
                   if(selected == false){
                       $(elem).attr('selected','selected');
                       selected = true ; 
                   }
               }else{
                   $(elem).attr('disabled','disabled'); 
               }
           }else{
                $(elem).removeAttr('disabled');
           }
      });   
    }
    

    Here with JQ .. if anybody search it

    0 讨论(0)
  • 2020-11-27 17:01

    Set an id to the option then use get element by id and disable it when x value has been selected..

    example

    <body>
          <select class="pull-right text-muted small" 
                     name="driveCapacity" id=driveCapacity onchange="checkRPM()">
          <option value="4000.0" id="4000">4TB</option>
          <option value="900.0" id="900">900GB</option>
          <option value="300.0" id ="300">300GB</option>
        </select>
        </body>
    <script>
    var perfType = document.getElementById("driveRPM").value;
    if(perfType == "7200"){         
            document.getElementById("driveCapacity").value = "4000.0";
            document.getElementById("4000").disabled = false;           
        }else{          
            document.getElementById("4000").disabled = true;            
        }    
    </script>
    
    0 讨论(0)
  • 2020-11-27 17:01

    You can also use this function,

    function optionDisable(selectId, optionIndices)
    {
        for (var idxCount=0; idxCount<optionIndices.length;idxCount++)
        {
            document.getElementById(selectId).children[optionIndices[idxCount]].disabled="disabled";
            document.getElementById(selectId).children[optionIndices[idxCount]].style.backgroundColor = '#ccc';
            document.getElementById(selectId).children[optionIndices[idxCount]].style.color = '#f00';
        }
    }
    
    0 讨论(0)
  • 2020-11-27 17:14

    Pure Javascript

    With pure Javascript, you'd have to cycle through each option, and check the value of it individually.

    // Get all options within <select id='foo'>...</select>
    var op = document.getElementById("foo").getElementsByTagName("option");
    for (var i = 0; i < op.length; i++) {
      // lowercase comparison for case-insensitivity
      (op[i].value.toLowerCase() == "stackoverflow") 
        ? op[i].disabled = true 
        : op[i].disabled = false ;
    }
    

    Without enabling non-targeted elements:

    // Get all options within <select id='foo'>...</select>
    var op = document.getElementById("foo").getElementsByTagName("option");
    for (var i = 0; i < op.length; i++) {
      // lowercase comparison for case-insensitivity
      if (op[i].value.toLowerCase() == "stackoverflow") {
        op[i].disabled = true;
      }
    }
    

    jQuery

    With jQuery you can do this with a single line:

    $("option[value='stackoverflow']")
      .attr("disabled", "disabled")
      .siblings().removeAttr("disabled");
    

    Without enabling non-targeted elements:

    $("option[value='stackoverflow']").attr("disabled", "disabled");
    

    ​ Note that this is not case insensitive. "StackOverflow" will not equal "stackoverflow". To get a case-insensitive match, you'd have to cycle through each, converting the value to a lower case, and then check against that:

    $("option").each(function(){
      if ($(this).val().toLowerCase() == "stackoverflow") {
        $(this).attr("disabled", "disabled").siblings().removeAttr("disabled");
      }
    });
    

    Without enabling non-targeted elements:

    $("option").each(function(){
      if ($(this).val().toLowerCase() == "stackoverflow") {
        $(this).attr("disabled", "disabled");
      }
    });
    
    0 讨论(0)
  • 2020-11-27 17:16

    For some reason other answers are unnecessarily complex, it's easy to do it in one line in pure JavaScript:

    Array.prototype.find.call(selectElement.options, o => o.value === optionValue).disabled = true;
    

    or

    selectElement.querySelector('option[value="'+optionValue.replace(/["\\]/g, '\\$&')+'"]').disabled = true;
    

    The performance depends on the number of the options (the more the options, the slower the first one) and whether you can omit the escaping (the replace call) from the second one. Also the first one uses Array.find and arrow functions that are not available in IE11.

    0 讨论(0)
  • 提交回复
    热议问题