2011-11-18 102 views
2

我想克隆输入字段并重命名单选按钮和其他控件的ID和名称。克隆工作正常,但名称不会重命名。我想重命名单选按钮名称“radio_1”到“radio_2”等。这是我的代码。克隆和重命名id和名称

<form name="form1" id="my_form" method="post" action=""> 
    <div><input type="text" id="text_1" name="text_1"/> </div> 
    <div><label><input type="radio" id=radio1_1" name="radio_1" value="1">Yes</label> 
    <label><input type="radio" id=radio1_1" name="radio_1" value="2">No</label> 
    </div> 

    <!-- Cloned markup--> 

    <div><label><input type="radio" id=radio1_2" name="radio_2" value="1">Yes</label> 
    <label><input type="radio" id=radio1_2" name="radio_2" value="2">No</label> 
    </div> 
     --------------- 
    <input type="submit" value="Submit"> 
</form> 

下面的代码似乎没有工作。

var settings = { 
     newid_ : 0, 
     target_: $(this), 
     insert_: "before", 
     limit_: 0 
}; 
     var srcid = 1; 
$(fieldclone).find('input, select, textarea').each(function(){ 
var s = $(this).attr("name");   
$(this).attr("name", s.replace(eval('/_'+srcid+'/ig'),'_'+settings.newid_)); 
var s1 = $(this).attr("id");    
$(this).attr("id", s1.replace(eval('/_'+srcid+'/ig'),'_'+settings.newid_)); 
}); 

回答

2

这是我使用的,诸如此类的事情,你可能可以调整它为您的应用程序:

(function($){ 
    $.fn.cloneAndIncrement = function(newIndex) { 
     var newItem = this.clone(); 
     newItem.find("[name]").each(function() { 
      $(this).attr("name", $(this).attr("name").replace(/\[\d\]/ , "[" + newIndex + "]")); 
     }); 
     newItem.find("[data-valmsg-for]").each(function() { 
      $(this).attr("data-valmsg-for", $(this).attr("data-valmsg-for").replace(/\[\d\]/ , "[" + newIndex + "]")); 
     }); 
     newItem.find("[id]").each(function() { 
      $(this).attr("id", $(this).attr("id").replace(/_\d_/ , "_" + newIndex + "_")); 
     }); 
     newItem.attr("id", newItem.attr("id").replace(/_\d_/ , "_" + newIndex + "_")); 
     newItem.find("input[name$='.Index']").val(newIndex); 
     var entityId = newItem.find("input:hidden[name$='.Id']"); 
     if (entityId) 
      entityId.val(0); 
     return newItem; 
    }; 
})($); 

注意,它是为ASP.NET MVC应用开发的,因此输入的期望值为Index。它还调整一些不显眼的验证属性并清除ID属性(因为在我的应用程序中这些克隆的输入是用于将其他项插入到数据库中的)。

请注意,我的约定是使用括号来跟踪索引项目。你想改变这个正则表达式是这样的(警告,未经测试!):

newItem.find("[name]").each(function() { 
      $(this).attr("name", $(this).attr("name").replace(/\_\d\/ , "_" + newIndex));