2013-10-07 221 views
1

我动态生成一些下拉列表,然后允许它们中的一些以浮动方式移除。所以那个时候,我遇到了选择选项(下拉)元素ID不匹配的错误。像下面的东西是。更改动态添加的选择选项元素的名称

新增加的下拉菜单。

select name="CSSAtapsClient[client_time_window_arr][0]" id="client_time_window_0">/select> 
select name="CSSAtapsClient[client_time_window_arr][1]" id="client_time_window_1">/select> 
select name="CSSAtapsClient[client_time_window_arr][2]" id="client_time_window_2">/select> 
select name="CSSAtapsClient[client_time_window_arr][3]" id="client_time_window_3">/select> 

我动态地通过javascript删除它们之后。 (让说我删除第二个),这样的话新的将被显示为以下,

select name="CSSAtapsClient[client_time_window_arr][0]" id="client_time_window_0">/select> 
    select name="CSSAtapsClient[client_time_window_arr][2]" id="client_time_window_2">/select> 
    select name="CSSAtapsClient[client_time_window_arr][3]" id="client_time_window_3">/select> 

所以,现在的问题我已经是,在下拉菜单的名称是这样的,(0,2, 3)

CSSAtapsClient[client_time_window_arr][0], 
CSSAtapsClient[client_time_window_arr][2], 
CSSAtapsClient[client_time_window_arr][3] 

因此,这是导致我的错误,我需要重新安排这个名字,并把它变成这个样子,(0,1,2)

CSSAtapsClient[client_time_window_arr][0] 
CSSAtapsClient[client_time_window_arr][1] 
CSSAtapsClient[client_time_window_arr][2] 

我怎样才能简单地重命名这些下拉列表的名称属性(从0到现在有多少dropins存在)?欣赏早日答复

编辑1

我尝试这样做,但没有工作。

$('#tbl_dynamic_call_dates select').each(function(i){ 
$(this).attr('name',"CSSAtapsClient[client_time_window_arr][i]"); 
}); 
+1

确保'id'属性是在网页上是独一无二的。 “这项技术的目标是避免已知会导致辅助技术问题的关键错误。”从W3C.org的这篇文章(http://www.w3.org/TR/WCAG-TECHS/H93.html) – Lan

+0

@Lan tnx处更新原始问题 – dev1234

回答

2

你可以简单地使用复位方法.attr()值:

$('#tbl_dynamic_call_dates select').attr('name', function(i) { 
    return 'CSSAtapsClient[client_time_window_arr]['+ i +']'; 
}); 
+2

简单的事情会更好。 – Lan

+0

@undefined你可以检查我的下面的答案,并告诉哪个更好的性能? – dev1234

+0

@mazraara当然,通过使用'.attr()'方法,您不必创建许多不必要的jQuery对象,使用'.attr()''的回调函数更加高效。你也可以在'.each()'回调中使用'this.name = ...',这比创建对象要好。 – undefined

1

我这样做,

$('#tbl_dynamic_call_dates select').each(function(i){ 
$(this).attr('name',"CSSAtapsClient[client_time_window_arr][" + i + "]"); 
});