获取有关更改的最新标记数据

时间:2016-06-23 11:32:37

标签: javascript jquery jquery-select2

我有这段代码:

var i = 0;
$('#jobs').change(function() {
  var id = $(this).select2('data')[i].id;
  var txt = $(this).select2('data')[i].text;
  $('#jobSection').append('<fieldset><legend>' + txt + '</legend><input type="text" class="form-control" name="size_' + id + '" placeholder="Size"><br/><select class="form-control" name="type_' + id + '"><option>Type</option><option value="1">Type 1</option><option value="2">Type 2</option></select></fieldset>');
  i++
});

有了这个,我为每个标签附加了额外的输入字段。

但只有按顺序选择标签才有效,否则需要先前的标签数据。

我理解问题出在i,因为这不是实际循环而是变更事件 所以我想知道如何在变化时获得最后的标签数据?

完整示例是here

2 个答案:

答案 0 :(得分:1)

我认为您应该重新设计应用程序,以便每次根据当前选定的元素更改选择时重建整个#jobSelection节点。这样就可以实现#jobSelection结构。

我查看了事件对象,但未找到有关上次选择的选项的信息。因此,您需要使用当前状态而不是更改。

如果这不是选项,您可以始终将先前的选择状态保留在某个变量中,并在每个onChange事件上使用当前状态进行区分。但我认为这不是解决问题的最佳方案。

答案 1 :(得分:1)

&#13;
&#13;
var selectOption = [{
   "id": 1,
   "text": "one"
 }, {
   "id": 2,
   "text": "two"
 }, {
   "id": 3,
   "text": "three"
 }, {
   "id": 4,
   "text": "four"
 }, {
   "id": 5,
   "text": "five"
 }];
 $('#jobs').select2({
   tags: true,
   multiple: true,
   placeholder: 'Choose job...',
   data: selectOption
 });

 var selectOptionObj = {};
 $.each(selectOption, function(i, v) {
   selectOptionObj[v.id] = v;
 });

 $('#jobs').change(function() {
   var thisVal = $(this)[0].value.split(',');
   var i = thisVal[thisVal.length - 1];
   var id = selectOptionObj[i].id;
   var txt = selectOptionObj[i].text;
   $('#jobSection').append('<fieldset><legend>' + txt + '</legend><input type="text" class="form-control" name="size_' + id + '" placeholder="Size"><br/><select class="form-control" name="type_' + id + '"><option>Type</option><option value="1">Type 1</option><option value="2">Type 2</option></select></fieldset>');
 });
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.full.min.js"></script>

<div id="jobSection">
  <input type="text" id="jobs">
</div>
&#13;
&#13;
&#13;

  

参考:JSFiddle