【问题标题】:why name attribute couldn't set using javascript?为什么无法使用 javascript 设置名称属性?
【发布时间】:2016-08-21 17:41:42
【问题描述】:

我希望在 JavaScript 中动态更改 name 属性,但我无法使用 element.namesetAttribute() 方法更改 name 属性。有没有其他方法可以设置name属性?

var status_Element = document.getElementsByName("BD_task_status_"+old_id+"[]");
var final_status_Element = document.getElementsByName("BD_final_task_status_"+old_id+"[]");                         
for(var in_count=0;in_count<status_Element.length;in_count++)
{                   
    status_Element[in_count].name="BD_task_status_level"+inner_count+"[]";
    final_status_Element[in_count].name="BD_final_task_status_level"+inner_count+"[]";
}

【问题讨论】:

  • 当您提出问题时,文本区域右侧有一个橙色的大如何格式化框,其中包含有用的信息。还有一个完整的格式化辅助工具栏。还有一个 [?] 按钮提供格式化帮助。 一个预览区域,位于文本区域和发布您的问题按钮(以便您必须扫描过去才能找到该按钮)之间,显示您的帖子发布后的样子。使您的帖子清晰,并证明您花时间这样做,可以提高您获得好答案的机会。
  • 能否让您的代码可读?
  • 我已为您修复了格式并将您的问题移至顶部。在转出代码之前,最好从简短的问题开始。
  • 我看到 inner_count 被使用但从未定义 - 也许您的意思是 in_count

标签: javascript


【解决方案1】:

在您的示例中设置 name 属性将起作用(inner_countin_count 错字除外)。问题是 getElementsByName 返回一个 live 元素集合。当您更改索引 0 处的元素名称时,它不再属于集合,集合将其删除;那么曾经位于索引 1 的元素现在位于索引 0。但与此同时,您已经增加了 in_count,因此您永远不会最终更改该元素。其中一半最终不会被更改。

要么:

  1. 向后循环遍历集合以更改名称(因为那时消失的元素位于末尾,您不在乎),或者

  2. 改用querySelectorAll,它会为您提供快照集合(不是实时集合)。 (所有现代浏览器和 IE8 都支持querySelectorAll。)

【讨论】:

  • @T.J.Crowder。如果更改的元素不再存在于集合中,则意味着更改的元素必须具有新名称。但这里不会发生任何变化
  • @sakthikumar: 那个 元素会改名,但是你会跳过下一个。如果您没有得到任何更改,则很可能是您的 Web 控制台中存在错误,告诉您出了什么问题(例如 inner_countin_count 的事情)。
猜你喜欢
  • 2013-09-25
  • 1970-01-01
  • 2010-11-24
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-31
  • 2012-03-13
相关资源
最近更新 更多