2 回答
TA贡献1796条经验 获得超4个赞
原因
你指出的问题确实存在,你说得对。但是这个问题与最近对kartik\select2 @V2.1.4
.The demo links 的更改有关。 演示链接使用的是旧版本的 select2 V2.1.3
,它没有dataset
定义这个属性,因此可以正常工作。
小部件不会集成所有这些更改,而是留给正在集成小部件的用户
原因是不可能在插件中正确控制它,因为可能有用户想要使用的任何小部件,并且继续为每个其他小部件添加代码不是我会投票的。因此,更好的方法是为需要对元素进行预处理或后处理的特定操作提供事件触发器,用户可以根据需要调整其代码
故障排除
现在关于这个问题,有一个新的数据集属性data-select2-id
,它保存 select2 绑定到的输入的名称,并且在克隆新元素后,该属性不会更新为导致旧的 select 元素消失的较新元素 id。
请参阅下面的图片,它来自我自己的代码,因此请忽略address-0-city
字段名称,因为它与您的代码无关,仅供理解
解决方案
所以我们需要把afterInsert事件中的代码改成下面的
let selectElement = $(this).find('.field-todelete-'+params.rowIndex+'-sex > select');
let dataKrajee = eval(selectElement.data('krajee-select2'));
//update the dataset attribute to the
if (typeof selectElement[0].dataset.select2Id !== 'undefined') {
//get the old dataset which has the old id of the input the select2 is bind to
let oldDataSelect2Id = selectElement[0].dataset.select2Id;
//delete the old dataset
delete selectElement[0].dataset.select2Id;
//add the new dataselect pointing to the new id of the cloned element
let newDataSelect2Id = oldDataSelect2Id.replace(
/\-([\d]+)\-/,
'-' + parseInt(params.rowIndex) + '-'
);
//add the new dataset with the new cloned input id
selectElement[0].dataset.select2Id= newDataSelect2Id;
}
selectElement.select2(dataKrajee);
我将在接下来的几天内更新 wiki 文档和代码示例以及演示中的代码。
希望能帮到你。
添加回答
举报