1

我正在使用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">[ - ] &nbsp;</a>
      <a href="#" id="phone-add">[ + ]</a>

 ​&lt;/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);
        }
    });
4

0 回答 0