【问题标题】:Disable multiselect option dynamically using JQuery使用 JQuery 动态禁用多选选项
【发布时间】:2017-03-18 05:07:17
【问题描述】:

我有两个多选下拉菜单,其中都有相同的一组值。

如果您在第一个下拉菜单中选择一个选项,则在第二个下拉菜单中应该禁用该选项。

我可以为第一个选项做,但不能为后续选项做。

请帮忙

<h4>Subject to </h4> <br>
                    <div class="form-group">
                        <label for="carrier">Charges * </label>
                        <select placeholder="Choose " class="form-control chosen-select" tabindex="2" name="subject_to[]" id="subject_to_id" width="40%"multiple>
                        <!-- chosen-select -->
                            <option value=""></option>  
                            <option value="CURRENCY" id="sub_opt1">CURRENCY</option>
                            <option value="BUNKER" id="sub_opt2">BUNKER</option>
                            <option value="LOW SULFUR" id="sub_opt3">LOW SULFUR</option>
                            <option value="CANAL" id="sub_opt4">CANAL</option>
                            <option value="GULF" id="sub_opt5">GULF</option>
                            <option value="PIRACY" id="sub_opt6">PIRACY</option>
                            <option value="WAR RISK" id="sub_opt7">WAR RISK</option>
                            <option value="CONGESTION" id="sub_opt8">CONGESTION</option>
                            <option value="PEAK SEASON" id="sub_opt9">PEAK SEASON</option>
                            <option value="RATE INCREASE" id="sub_opt10">RATE INCREASE</option>
                            <option value="EMERGENCY" id="sub_opt11">EMERGENCY</option>
                            <option value="WINTER" id="sub_opt1">WINTER</option>
                            <option value="DRAFT LIMITATION" id="sub_opt12">DRAFT LIMITATION</option>
                            <option value="OTHER" id="sub_opt13">OTHER</option>
                            <option value="TERMINAL HANDLING" id="sub_opt14">TERMINAL HANDLING</option>
                            <option value="BOOKING" id="sub_opt15">BOOKING</option>
                            <option value="DOCUMENTATION" id="sub_opt16">DOCUMENTATION</option>
                            <option value="TELEX" id="sub_opt17">TELEX</option>
                            <option value="EXPORT DECLARATION (ENS, AMS, etc.)" id="sub_opt18">EXPORT DECLARATION (ENS, AMS, etc.)</option>
                            <option value="PORT CHARGE" id="sub_opt19">PORT CHARGE</option>
                            <option value="SECURITY" id="sub_opt20">SECURITY</option>
                            <option value="SEAL" id="sub_opt21">SEAL</option>
                            <option value="CONTAINER INSPECTION" id="sub_opt22">CONTAINER INSPECTION</option>
                            <option value="CONTAINER WEIGHTING" id="sub_opt23">CONTAINER WEIGHTING</option>
                            <option value="CIC/EBS" id="sub_opt24">CIC/EBS</option>
                        </select>
                    </div>

                </div>
                <div class="col-md-4">
                <h4> Inclusive </h4> <br>
                    <div class="form-group">
                        <label for="inclusive"> Charges * </label>
                        <select placeholder="" class="form-control" tabindex="2" id="inclusive_id" name="inclusive[]" multiple>
                            <!-- chosen-select -->
                            <option value=""></option>  
                            <option value="CURRENCY" id="inc_opt1">CURRENCY</option>
                            <option value="BUNKER" id="inc_opt2">BUNKER</option>
                            <option value="LOW SULFUR" id="inc_opt3">LOW SULFUR</option>
                            <option value="CANAL" id="inc_opt4">CANAL</option>
                            <option value="GULF" id="inc_opt5">GULF</option>
                            <option value="PIRACY" id="inc_opt6">PIRACY</option>
                            <option value="WAR RISK" id="inc_opt7">WAR RISK</option>
                            <option value="CONGESTION" id="inc_opt8">CONGESTION</option>
                            <option value="PEAK SEASON" id="inc_opt9">PEAK SEASON</option>
                            <option value="RATE INCREASE" id="inc_opt10">RATE INCREASE</option>
                            <option value="EMERGENCY" id="inc_opt11">EMERGENCY</option>
                            <option value="WINTER" id="inc_opt1">WINTER</option>
                            <option value="DRAFT LIMITATION" id="inc_opt12">DRAFT LIMITATION</option>
                            <option value="OTHER" id="inc_opt13">OTHER</option>
                            <option value="TERMINAL HANDLING" id="inc_opt14">TERMINAL HANDLING</option>
                            <option value="BOOKING" id="inc_opt15">BOOKING</option>
                            <option value="DOCUMENTATION" id="inc_opt16">DOCUMENTATION</option>
                            <option value="TELEX" id="inc_opt17">TELEX</option>
                            <option value="EXPORT DECLARATION (ENS, AMS, etc.)" id="inc_opt18">EXPORT DECLARATION (ENS, AMS, etc.)</option>
                            <option value="PORT CHARGE" id="inc_opt19">PORT CHARGE</option>
                            <option value="SECURITY" id="inc_opt20">SECURITY</option>
                            <option value="SEAL" id="inc_opt21">SEAL</option>
                            <option value="CONTAINER INSPECTION" id="inc_opt22">CONTAINER INSPECTION</option>
                            <option value="CONTAINER WEIGHTING" id="inc_opt23">CONTAINER WEIGHTING</option>
                            <option value="CIC/EBS" id="inc_opt24">CIC/EBS</option>
                        </select>
                    </div>



    $('#subject_to_id').on('change', function (e) {
        var optionSelected = $("option:selected", this);
        var idSelected = this.value;

        var idSelected = $(this).children(":selected").attr("id");
        var str = idSelected;

        //alert(str + " "+str.length)

        var inc_id = "#inc_"+str.substring(4, str.length);

        //alert(inc_id);
        $(inc_id).attr("disabled","disabled");

});

【问题讨论】:

标签: javascript jquery multi-select


【解决方案1】:

这可以通过相对选择器来完成。我为此使用了option 点击事件。然后我抓住另一个表单组并对其进行修改。它适用于两种方式,这意味着如果您从选择 A 中选择,则选择 B 将被修改,反之亦然。

$("option").click(function () {
    $otherFormGroup = $(".form-group").not(
         $(this)
            .parents(".form-group:first")
    ); //grabs the other form group
    $otherFormGroup.find("option").attr("disabled", false); //resets all other banned items
    $otherFormGroup.find("option[value='"+$(this).attr("value")+"']")
        .attr("disabled",true); //disabled selected item in the other select area
});
<!-- Modified HTML to only demostrate content better in snippet, you can leave your HTML as is. -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Subject To:
<br><br>
<div class="form-group  form-group0">
   <label for="carrier">Charges * </label>
   <select placeholder="Choose " class="form-control chosen-select" tabindex="2" name="subject_to[]" id="subject_to_id" width="40%"multiple>
      <!-- chosen-select -->
      <option value=""></option>
      <option value="CURRENCY" id="sub_opt1">CURRENCY</option>
      <option value="BUNKER" id="sub_opt2">BUNKER</option>
      <option value="LOW SULFUR" id="sub_opt3">LOW SULFUR</option>
      <option value="CANAL" id="sub_opt4">CANAL</option>
      <option value="GULF" id="sub_opt5">GULF</option>
      <option value="PIRACY" id="sub_opt6">PIRACY</option>
      <option value="WAR RISK" id="sub_opt7">WAR RISK</option>
      <option value="CONGESTION" id="sub_opt8">CONGESTION</option>
      <option value="PEAK SEASON" id="sub_opt9">PEAK SEASON</option>
      <option value="RATE INCREASE" id="sub_opt10">RATE INCREASE</option>
      <option value="EMERGENCY" id="sub_opt11">EMERGENCY</option>
      <option value="WINTER" id="sub_opt1">WINTER</option>
      <option value="DRAFT LIMITATION" id="sub_opt12">DRAFT LIMITATION</option>
      <option value="OTHER" id="sub_opt13">OTHER</option>
      <option value="TERMINAL HANDLING" id="sub_opt14">TERMINAL HANDLING</option>
      <option value="BOOKING" id="sub_opt15">BOOKING</option>
      <option value="DOCUMENTATION" id="sub_opt16">DOCUMENTATION</option>
      <option value="TELEX" id="sub_opt17">TELEX</option>
      <option value="EXPORT DECLARATION (ENS, AMS, etc.)" id="sub_opt18">EXPORT DECLARATION (ENS, AMS, etc.)</option>
      <option value="PORT CHARGE" id="sub_opt19">PORT CHARGE</option>
      <option value="SECURITY" id="sub_opt20">SECURITY</option>
      <option value="SEAL" id="sub_opt21">SEAL</option>
      <option value="CONTAINER INSPECTION" id="sub_opt22">CONTAINER INSPECTION</option>
      <option value="CONTAINER WEIGHTING" id="sub_opt23">CONTAINER WEIGHTING</option>
      <option value="CIC/EBS" id="sub_opt24">CIC/EBS</option>
   </select>
</div>

From:
<br><br>
<div class="form-group form-group1">
   <label for="carrier">Charges * </label>
   <select placeholder="Choose " class="form-control chosen-select" tabindex="2" name="subject_to[]" id="subject_to_id" width="40%"multiple>
      <!-- chosen-select -->
      <option value=""></option>
      <option value="CURRENCY" id="sub_opt1">CURRENCY</option>
      <option value="BUNKER" id="sub_opt2">BUNKER</option>
      <option value="LOW SULFUR" id="sub_opt3">LOW SULFUR</option>
      <option value="CANAL" id="sub_opt4">CANAL</option>
      <option value="GULF" id="sub_opt5">GULF</option>
      <option value="PIRACY" id="sub_opt6">PIRACY</option>
      <option value="WAR RISK" id="sub_opt7">WAR RISK</option>
      <option value="CONGESTION" id="sub_opt8">CONGESTION</option>
      <option value="PEAK SEASON" id="sub_opt9">PEAK SEASON</option>
      <option value="RATE INCREASE" id="sub_opt10">RATE INCREASE</option>
      <option value="EMERGENCY" id="sub_opt11">EMERGENCY</option>
      <option value="WINTER" id="sub_opt1">WINTER</option>
      <option value="DRAFT LIMITATION" id="sub_opt12">DRAFT LIMITATION</option>
      <option value="OTHER" id="sub_opt13">OTHER</option>
      <option value="TERMINAL HANDLING" id="sub_opt14">TERMINAL HANDLING</option>
      <option value="BOOKING" id="sub_opt15">BOOKING</option>
      <option value="DOCUMENTATION" id="sub_opt16">DOCUMENTATION</option>
      <option value="TELEX" id="sub_opt17">TELEX</option>
      <option value="EXPORT DECLARATION (ENS, AMS, etc.)" id="sub_opt18">EXPORT DECLARATION (ENS, AMS, etc.)</option>
      <option value="PORT CHARGE" id="sub_opt19">PORT CHARGE</option>
      <option value="SECURITY" id="sub_opt20">SECURITY</option>
      <option value="SEAL" id="sub_opt21">SEAL</option>
      <option value="CONTAINER INSPECTION" id="sub_opt22">CONTAINER INSPECTION</option>
      <option value="CONTAINER WEIGHTING" id="sub_opt23">CONTAINER WEIGHTING</option>
      <option value="CIC/EBS" id="sub_opt24">CIC/EBS</option>
   </select>
</div>

请注意,hardik prajapati 的帖子在您尝试几次后无法正确重置选项。

【讨论】:

    【解决方案2】:

    前面的答案对多选无效,我已经修改了代码以匹配多选

    $(".form-group:first option").click(function () {
        var selecteds = $('option:selected', $(this).parent());
        $secondFormGroup = $(".form-group:eq(1)");
        $secondFormGroup.find("option").attr("disabled", false);
        selecteds.each(function (i, el) {
        		var id = this.id.substr(7);
            $('#inc_opt' + id).attr('disabled', true);
        });
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <h4>Subject to </h4> <br>
                        <div class="form-group">
                            <label for="carrier">Charges * </label>
                            <select placeholder="Choose " class="form-control chosen-select" tabindex="2" name="subject_to[]" id="subject_to_id" width="40%"multiple>
                            <!-- chosen-select -->
                                <option value=""></option>  
                                <option value="CURRENCY" id="sub_opt1">CURRENCY</option>
                                <option value="BUNKER" id="sub_opt2">BUNKER</option>
                                <option value="LOW SULFUR" id="sub_opt3">LOW SULFUR</option>
                                <option value="CANAL" id="sub_opt4">CANAL</option>
                                <option value="GULF" id="sub_opt5">GULF</option>
                                <option value="PIRACY" id="sub_opt6">PIRACY</option>
                                <option value="WAR RISK" id="sub_opt7">WAR RISK</option>
                                <option value="CONGESTION" id="sub_opt8">CONGESTION</option>
                                <option value="PEAK SEASON" id="sub_opt9">PEAK SEASON</option>
                                <option value="RATE INCREASE" id="sub_opt10">RATE INCREASE</option>
                                <option value="EMERGENCY" id="sub_opt11">EMERGENCY</option>
                                <option value="WINTER" id="sub_opt1">WINTER</option>
                                <option value="DRAFT LIMITATION" id="sub_opt12">DRAFT LIMITATION</option>
                                <option value="OTHER" id="sub_opt13">OTHER</option>
                                <option value="TERMINAL HANDLING" id="sub_opt14">TERMINAL HANDLING</option>
                                <option value="BOOKING" id="sub_opt15">BOOKING</option>
                                <option value="DOCUMENTATION" id="sub_opt16">DOCUMENTATION</option>
                                <option value="TELEX" id="sub_opt17">TELEX</option>
                                <option value="EXPORT DECLARATION (ENS, AMS, etc.)" id="sub_opt18">EXPORT DECLARATION (ENS, AMS, etc.)</option>
                                <option value="PORT CHARGE" id="sub_opt19">PORT CHARGE</option>
                                <option value="SECURITY" id="sub_opt20">SECURITY</option>
                                <option value="SEAL" id="sub_opt21">SEAL</option>
                                <option value="CONTAINER INSPECTION" id="sub_opt22">CONTAINER INSPECTION</option>
                                <option value="CONTAINER WEIGHTING" id="sub_opt23">CONTAINER WEIGHTING</option>
                                <option value="CIC/EBS" id="sub_opt24">CIC/EBS</option>
                            </select>
                        </div>
    
                    </div>
                    <div class="col-md-4">
                    <h4> Inclusive </h4> <br>
                        <div class="form-group">
                            <label for="inclusive"> Charges * </label>
                            <select placeholder="" class="form-control" tabindex="2" id="inclusive_id" name="inclusive[]" multiple>
                                <!-- chosen-select -->
                                <option value=""></option>  
                                <option value="CURRENCY" id="inc_opt1">CURRENCY</option>
                                <option value="BUNKER" id="inc_opt2">BUNKER</option>
                                <option value="LOW SULFUR" id="inc_opt3">LOW SULFUR</option>
                                <option value="CANAL" id="inc_opt4">CANAL</option>
                                <option value="GULF" id="inc_opt5">GULF</option>
                                <option value="PIRACY" id="inc_opt6">PIRACY</option>
                                <option value="WAR RISK" id="inc_opt7">WAR RISK</option>
                                <option value="CONGESTION" id="inc_opt8">CONGESTION</option>
                                <option value="PEAK SEASON" id="inc_opt9">PEAK SEASON</option>
                                <option value="RATE INCREASE" id="inc_opt10">RATE INCREASE</option>
                                <option value="EMERGENCY" id="inc_opt11">EMERGENCY</option>
                                <option value="WINTER" id="inc_opt1">WINTER</option>
                                <option value="DRAFT LIMITATION" id="inc_opt12">DRAFT LIMITATION</option>
                                <option value="OTHER" id="inc_opt13">OTHER</option>
                                <option value="TERMINAL HANDLING" id="inc_opt14">TERMINAL HANDLING</option>
                                <option value="BOOKING" id="inc_opt15">BOOKING</option>
                                <option value="DOCUMENTATION" id="inc_opt16">DOCUMENTATION</option>
                                <option value="TELEX" id="inc_opt17">TELEX</option>
                                <option value="EXPORT DECLARATION (ENS, AMS, etc.)" id="inc_opt18">EXPORT DECLARATION (ENS, AMS, etc.)</option>
                                <option value="PORT CHARGE" id="inc_opt19">PORT CHARGE</option>
                                <option value="SECURITY" id="inc_opt20">SECURITY</option>
                                <option value="SEAL" id="inc_opt21">SEAL</option>
                                <option value="CONTAINER INSPECTION" id="inc_opt22">CONTAINER INSPECTION</option>
                                <option value="CONTAINER WEIGHTING" id="inc_opt23">CONTAINER WEIGHTING</option>
                                <option value="CIC/EBS" id="inc_opt24">CIC/EBS</option>
                            </select>
                        </div>

    【讨论】:

    • 这很有帮助。大力支持。非常感谢!
    【解决方案3】:

    在选择中,CURRENCY 和 WINTER 中的 Id 值都相同,我已更改它,并在脚本中将 inc_id 对象放入函数中。

    $('#subject_to_id').on('change', function (e) {
          var optionSelected = $("option:selected", this);
          var idSelected = this.value;
    
          var idSelected = $(this).children(":selected").attr("id");
          var str = idSelected;
    
          //alert(str + " "+str.length)
    
          var inc_id = "#inc_" + str.substring(4, str.length);
    
          //alert(inc_id);
          $(inc_id).attr("disabled", "disabled");
    
       });
    <script src="https://code.jquery.com/jquery-1.11.3.js"></script> 
    <div class="col-md-4">
       <h4>Subject to </h4> <br>
       <div class="form-group">
          <label for="carrier">Charges * </label>
          <select class="form-control chosen-select" tabindex="2" name="subject_to[]" id="subject_to_id" multiple >
             <!-- chosen-select -->
             <option value=""></option>  
             <option value="CURRENCY" id="sub_opt1">CURRENCY</option>
             <option value="BUNKER" id="sub_opt2">BUNKER</option>
             <option value="LOW SULFUR" id="sub_opt3">LOW SULFUR</option>
             <option value="CANAL" id="sub_opt4">CANAL</option>
             <option value="GULF" id="sub_opt5">GULF</option>
             <option value="PIRACY" id="sub_opt6">PIRACY</option>
             <option value="WAR RISK" id="sub_opt7">WAR RISK</option>
             <option value="CONGESTION" id="sub_opt8">CONGESTION</option>
             <option value="PEAK SEASON" id="sub_opt9">PEAK SEASON</option>
             <option value="RATE INCREASE" id="sub_opt10">RATE INCREASE</option>
             <option value="EMERGENCY" id="sub_opt11">EMERGENCY</option>
             <option value="WINTER" id="sub_opt12">WINTER</option>
             <option value="DRAFT LIMITATION" id="sub_opt13">DRAFT LIMITATION</option>
             <option value="OTHER" id="sub_opt14">OTHER</option>
             <option value="TERMINAL HANDLING" id="sub_opt15">TERMINAL HANDLING</option>
             <option value="BOOKING" id="sub_opt16">BOOKING</option>
             <option value="DOCUMENTATION" id="sub_opt17">DOCUMENTATION</option>
             <option value="TELEX" id="sub_opt18">TELEX</option>
             <option value="EXPORT DECLARATION (ENS, AMS, etc.)" id="sub_opt19">EXPORT DECLARATION (ENS, AMS, etc.)</option>
             <option value="PORT CHARGE" id="sub_opt20">PORT CHARGE</option>
             <option value="SECURITY" id="sub_opt21">SECURITY</option>
             <option value="SEAL" id="sub_opt22">SEAL</option>
             <option value="CONTAINER INSPECTION" id="sub_opt23">CONTAINER INSPECTION</option>
             <option value="CONTAINER WEIGHTING" id="sub_opt24">CONTAINER WEIGHTING</option>
             <option value="CIC/EBS" id="sub_opt25">CIC/EBS</option>
          </select>
       </div>
    </div>
    <div class="col-md-4">        
    
       <h4> Inclusive </h4> <br>
       <div class="form-group">
          <label for="inclusive"> Charges * </label>
          <select class="form-control" tabindex="2" id="inclusive_id" name="inclusive[]" multiple>
             <!-- chosen-select -->
             <option value=""></option>  
             <option value="CURRENCY" id="inc_opt1">CURRENCY</option>
             <option value="BUNKER" id="inc_opt2">BUNKER</option>
             <option value="LOW SULFUR" id="inc_opt3">LOW SULFUR</option>
             <option value="CANAL" id="inc_opt4">CANAL</option>
             <option value="GULF" id="inc_opt5">GULF</option>
             <option value="PIRACY" id="inc_opt6">PIRACY</option>
             <option value="WAR RISK" id="inc_opt7">WAR RISK</option>
             <option value="CONGESTION" id="inc_opt8">CONGESTION</option>
             <option value="PEAK SEASON" id="inc_opt9">PEAK SEASON</option>
             <option value="RATE INCREASE" id="inc_opt10">RATE INCREASE</option>
             <option value="EMERGENCY" id="inc_opt11">EMERGENCY</option>
             <option value="WINTER" id="inc_opt12">WINTER</option>
             <option value="DRAFT LIMITATION" id="inc_opt13">DRAFT LIMITATION</option>
             <option value="OTHER" id="inc_opt14">OTHER</option>
             <option value="TERMINAL HANDLING" id="inc_opt15">TERMINAL HANDLING</option>
             <option value="BOOKING" id="inc_opt16">BOOKING</option>
             <option value="DOCUMENTATION" id="inc_opt17">DOCUMENTATION</option>
             <option value="TELEX" id="inc_opt18">TELEX</option>
             <option value="EXPORT DECLARATION (ENS, AMS, etc.)" id="inc_opt19">EXPORT DECLARATION (ENS, AMS, etc.)</option>
             <option value="PORT CHARGE" id="inc_opt20">PORT CHARGE</option>
             <option value="SECURITY" id="inc_opt21">SECURITY</option>
             <option value="SEAL" id="inc_opt22">SEAL</option>
             <option value="CONTAINER INSPECTION" id="inc_opt23">CONTAINER INSPECTION</option>
             <option value="CONTAINER WEIGHTING" id="inc_opt24">CONTAINER WEIGHTING</option>
             <option value="CIC/EBS" id="inc_opt25">CIC/EBS</option>
          </select>
       </div>
    </div>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-04
      • 2011-01-09
      • 2011-12-26
      • 1970-01-01
      • 2012-07-22
      • 1970-01-01
      • 1970-01-01
      • 2018-02-19
      相关资源
      最近更新 更多