dynamic-form:在jeasyui中使用element时未定义idAttr

时间:2012-08-29 09:34:42

标签: jquery html

我正在使用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>

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

0 个答案:

没有答案