我正在使用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>
当我运行代码时,元素是重复的,但它给出了这个错误:
类型错误:idAttr 未定义。newIdAttr = idAttr.slice(0,-1) + 索引,
但是当我删除初始化 jeasyui >> $('#empPhoneType') 时,元素被复制并且没有给出任何错误
有人能帮我吗?
好的,我已经解决了这个问题。问题出dynamic-form.js
在函数中,normalizeClone()
它运行每个循环的函数formFields
(“输入、复选框、选择、文本区域”)。
当它循环时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);
}
});