简体   繁体   English

插入2种不同的复选框中,仅选中复选框

[英]Insert in 2 different select only the checked item of checkboxes

I have various checkboxes with the same name: 我有多个具有相同名称的复选框:

<input type="checkbox" name="convocati[]" value="A">A
<input type="checkbox" name="convocati[]" value="B">B
<input type="checkbox" name="convocati[]" value="C">C
<input type="checkbox" name="convocati[]" value="D">D
<select name="S1">
   <option value=""></option>
</select>
 <select name="S2">
   <option value=""></option>
</select>

Every change status, I wish that in the two select there are only checked values. 每次更改状态时,我希望在两个选择中只有选中的值。 Example: If I check A and C, the 2 SELECT will be: 示例:如果我检查A和C,则2 SELECT将为:

<select name="S1">
   <option value=""></option>
   <option value="A">A</option>
   <option value="C">C</option>
</select>
<select name="S2">
   <option value=""></option>
   <option value="A">A</option>
   <option value="C">C</option>
</select>

If I uncheck A and check D (So C remain): 如果我取消选中A并选中D(因此C仍然存在):

    <select name="S1">
       <option value=""></option>
       <option value="C">C</option>
       <option value="D">D</option>
    </select>
    <select name="S2">
       <option value=""></option>
       <option value="C">C</option>
       <option value="D">D</option>
    </select>

and so on... 等等...

Please check below working snnipet. 请检查以下工作片段。

 $("input[type='checkbox']").on("change",function(){ if($(this). prop("checked") == true){ $("select[name='S1'],select[name='S2']").append('<option value="'+$(this).val()+'">'+$(this).val()+'</option>'); }else{ $("select[name='S1'] option[value='"+$(this).val()+"'],select[name='S2'] option[value='"+$(this).val()+"']").remove(); } }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <input type="checkbox" name="convocati[]" value="A">A <input type="checkbox" name="convocati[]" value="B">B <input type="checkbox" name="convocati[]" value="C">C <input type="checkbox" name="convocati[]" value="D">D <select name="S1"> <option value=""></option> </select> <select name="S2"> <option value=""></option> </select> 

Try this example: https://jsfiddle.net/mccoe8v6/ 尝试以下示例: https : //jsfiddle.net/mccoe8v6/

$(document).ready(function(){
  $(".convocati").click(function(){
     var thisVal = $(this).val();
     debugger;
     if ($(this).is(":checked"))
     {
        $(".convatiSelect").append($("<option>").attr('value', thisVal).html(thisVal));
      }
     else{
       var option = $(".convatiSelect").find("option[value='" + thisVal + "']").remove();
     }
  });
});

You may want to sort the options after adding them. 您可能需要在添加选项后对其进行排序。

Try This - 尝试这个 -

 $('input[type=checkbox][name^=convocati]').change(function() { $('select').html(''); var option = new Option("", ""); $('select').append($(option)); $('input[type=checkbox][name^=convocati]:checked').each(function() { var option = new Option($(this).val(), $(this).val()); $('select').append($(option)); }); }) 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <input type="checkbox" name="convocati[]" value="A">A <input type="checkbox" name="convocati[]" value="B">B <input type="checkbox" name="convocati[]" value="C">C <input type="checkbox" name="convocati[]" value="D">D <select name="S1"> <option value=""></option> </select> <select name="S2"> <option value=""></option> </select> 

You can use following script to make it work as expected 您可以使用以下脚本使其按预期运行

Please find comments in code below added on each step to get your output 请在下面的代码中找到在每个步骤中添加的注释,以获取输出

$(function(){

     //First bind a Change event for all checkbox  
     $("inputt[type='checkbox']").change(function(){

     //We will create on array of values which will hold fresh values of all checkboxes on each change
      var values =[];


       // Now we will fill our values array and add values for checked checkboxes
       $("inputt[type='checkbox']").filter(":checked").each(function(){
             values.push($(this).val());
        }
  );

  // Once we get all values which are checked, we just need to create option template like following
   var options= "";
   for(i=0; i< values.length;i++)
   {
       options+="<option>" + values[i] + "</option>";     
    }

    // SET INNER HMTL of target select once with option template
    $("select[name=S1]").html(options);
    $("select[name=S2]").html(options);
  });
});


<input type="checkbox" name="convocati[]" value="A">A
<input type="checkbox" name="convocati[]" value="B">B
<input type="checkbox" name="convocati[]" value="C">C
<input type="checkbox" name="convocati[]" value="D">D
<select name="S1">
   <option value=""></option>
</select>
 <select name="S2">
   <option value=""></option>
</select>

Please check the working Fiddle 请检查工作提琴

To achieve this you can use map() to build an array from the checked checkboxes which contains the required HTML and then set it as the html() of the select() elements. 为此,您可以使用map()从选中的复选框构建一个包含所需HTML的数组,然后将其设置为select()元素的html() Try this: 尝试这个:

 $(':checkbox').change(function() { var html = '<option value=""></option>'; html += $(':checkbox:checked').map(function() { return '<option value="' + this.value + '">' + this.value + '</option>'; }).get().join(''); $('select').html(html); }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <input type="checkbox" name="convocati[]" value="A">A <input type="checkbox" name="convocati[]" value="B">B <input type="checkbox" name="convocati[]" value="C">C <input type="checkbox" name="convocati[]" value="D">D <select name="S1"> <option value=""></option> </select> <select name="S2"> <option value=""></option> </select> 

Note that this is using generic selectors, such as :checkbox and select . 请注意,这使用的是通用选择器,例如:checkboxselect In a production environment I'd strongly suggest you give your elements some classes which you can use to identify them more specifically. 在生产环境中,我强烈建议您为元素提供一些类,这些类可用于更具体地标识它们。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM