Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jquery中的映射值必须是唯一的_Jquery_Mapping_Html Select - Fatal编程技术网

jquery中的映射值必须是唯一的

jquery中的映射值必须是唯一的,jquery,mapping,html-select,Jquery,Mapping,Html Select,这是一个关于这个网站上的帖子的问题。。。 有一个到的演示链接,代码是 <select id="lab_abbr" multiple > <option value="o1">Option 1</option> <option value="o2">Option 2</option> <option value="o3">Option 3</option> </select> <i

这是一个关于这个网站上的帖子的问题。。。

有一个到的演示链接,代码是

<select id="lab_abbr" multiple >
  <option value="o1">Option 1</option>
  <option value="o2">Option 2</option>
  <option value="o3">Option 3</option>
</select>

<input type="checkbox" name="lab[one]" id="lab_one" />
<input type="checkbox" name="lab[two]" id="lab_two" />
<input type="checkbox" name="lab[three]" id="lab_three" />
<input type="checkbox" name="lab[four]" id="lab_four" />
<input type="checkbox" name="lab[five]" id="lab_five" />
<input type="checkbox" name="lab[six]" id="lab_six" /> 
我想使用此功能,但只能映射一次值。所以,如果我想把“实验室一号”映射到o3和o1,这是不可能的。它只使用了最后一个案例,因此具有从o1中移除“lab_one”的效果。这样做很好。例如,我想,当点击一名足球运动员时,检查他所攻入的球队。有没有一种方法可以多次赋值


非常感谢您的帮助。

我只想在每个选项附加的数据属性中选中您想选中的复选框,然后根据该复选框选中或取消选中

HTML:


除非您有巨大的映射,否则只需将“lab_one”放在o3阵列中即可。非常感谢您的回复,很抱歉没有尽快回复,但我没有收到回复的电子邮件通知@patrickevans正如我理解你的评论,我认为这是我遇到的问题,将lab_one添加到o3中会使o1失去它。我可能误解了你说的话,但谢谢你的回应。谢谢你@adeneo,这就是诀窍。我对jquery很陌生,所以您的一些语法有点复杂,但我将对其进行详细分析,看看它是如何工作的,但它确实工作得非常出色。谢谢你帮助我。
var mapping = { 'o1' : ['lab_one', 'lab_three'], 'o2' : ['lab_two', 'lab_six'], 
                'o3' : ['lab_four', 'lab_five'] };

$("#lab_abbr").on("change", function () {
  $.each( this.options, function () {
    $( "#" + mapping[ this.value ].join(", #") ).prop("checked", this.selected); 
  });
});
<select id="lab_abbr" multiple >
  <option value="o1" data-elem="one, three"      >Option 1</option>
  <option value="o2" data-elem="two, six"        >Option 2</option>
  <option value="o3" data-elem="one, four, five" >Option 3</option>
</select>

<input type="checkbox" name="lab[one]"   id="lab_one"   />
<input type="checkbox" name="lab[two]"   id="lab_two"   />
<input type="checkbox" name="lab[three]" id="lab_three" />
<input type="checkbox" name="lab[four]"  id="lab_four"  />
<input type="checkbox" name="lab[five]"  id="lab_five"  />
<input type="checkbox" name="lab[six]"   id="lab_six"   /> 
$("#lab_abbr").on("change", function () {
    var elems = $.map($('option:selected', this).data('elem').split(','), function(x) {
         return $.trim(x);
    });
    $('[name^="lab\\["]').prop('checked', function() {
        return $.inArray(this.id.replace('lab_',''), elems) != -1;
    });
});