我正在使用Jeasyui创建表单元素,我需要使用jQuery Dynamic Form复制表单中的某些元素。
JS:
// generate combobox with jeasyui
$('#empPhoneType').combobox({
url: '<?=BASE_URL?>mdm/employee/contacttype?t=mail',
valueField:'id',
textField:'name'
});
// called to generate dynamic element
$('#phoneWrapper').dynamicForm('#phone-add', '#phone-remove', {limit:5});
HTML:
<form id="form">
<label for="empPhone">Telepon</label>
<div style="margin-bottom: 10px;" id="phoneWrapper">
<select id="empPhoneType" name="empPhoneType"></select>
<input type="text" id="empPhone" name="empPhone"/>
</div>
<a href="#" id="phone-remove">[ - ] </a>
<a href="#" id="phone-add">[ + ]</a>
</form>
当我运行代码时,该元素是重复的,但它会出现此错误:
TypeError:idAttr未定义。 newIdAttr = idAttr.slice(0,-1)+ index,
但是当我删除了初始化jeasyui&gt;&gt; $('#empPhoneType'),该元素是重复的,并没有给出任何错误
有人可以帮助我吗?
好的,我已经解决了这个问题。
问题出在dynamic-form.js
在函数normalizeClone()
中,它运行循环formFields
的每个函数(“input,checkbox,select,textarea”)。
当它循环formFields
时,有一个变量试图捕获元素id。
但是当元素没有id时没有处理。
所以如果元素没有id,我只需要处理一个处理程序。
原始功能:
elmnt.find(formFields).each(function(){
var that = $(this);
var idAttrs = that.attr("id");
var nameAttr = that.attr("name");
var origNameAttr = that.attr("origname");
var newIdAttr = idAttrs.slice(0, -1) + index;
match = matchRegEx.exec(nameAttr);
if (idAttrs) {
that.attr("name", match[1]+index+match[3]);
that.attr("origid", idAttrs);
elmnt.find("label[for='"+idAttrs+"']").each(function(){
$(this).attr("for", newIdAttr);
});
that.attr("id", newIdAttr);
}
});
为函数添加处理程序:
elmnt.find(formFields).each(function(){
var that = $(this);
var idAttrs = that.attr("id");
if (idAttrs) {
var nameAttr = that.attr("name");
var origNameAttr = that.attr("origname") || idAttrs.slice(0, -1);
var newIdAttr = idAttrs.slice(0, -1) + index;
match = matchRegEx.exec(nameAttr);
if(match)
that.attr("name", match[1]+index+match[3]);
that.attr("origid", idAttrs);
elmnt.find("label[for='"+idAttrs+"']").each(function(){
$(this).attr("for", newIdAttr);
});
that.attr("id", newIdAttr);
}
});