我有这段代码:
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
答案 0 :(得分:1)
我认为您应该重新设计应用程序,以便每次根据当前选定的元素更改选择时重建整个#jobSelection节点。这样就可以实现#jobSelection结构。
我查看了事件对象,但未找到有关上次选择的选项的信息。因此,您需要使用当前状态而不是更改。
如果这不是选项,您可以始终将先前的选择状态保留在某个变量中,并在每个onChange事件上使用当前状态进行区分。但我认为这不是解决问题的最佳方案。
答案 1 :(得分:1)
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;
参考:JSFiddle