【问题标题】:Dynamic javascript variable name using for loop [duplicate]使用for循环的动态javascript变量名[重复]
【发布时间】:2015-02-09 21:46:43
【问题描述】:

我有问题。在这方面工作了很长时间,但真的卡住了。在 stackoverflow 中搜索类似问题并没有真正帮助我 - 因为人们有一些不同的问题,我无法实现我的代码的答案。

我有一个动态变化的<input> 元素,它们的 id 和值是由 PHP 创建的。所以,<input> 元素的总数可能有 1 个甚至 10+。

HTML:

<input id='photonumb1' type='text' value='001'/> 
<input id='photonumb2' type='text' value='002'/> 
<input id='photonumb3' type='text' value='003'/> 
...

还有一个&lt;input id="totalphotos" /&gt; 标签,其值是创建了多少&lt;input&gt; 元素。

我希望 JavaScript 获取 &lt;input&gt; 元素的数量(可能从“totalnumbers”获取一个值)并获取所有“photonumb*”的值(我想使用for() 循环?) .每个元素的每个值都将被分配为新变量,例如:

var photoname1 = 001;
var photoname2 = 002;
var photoname3 = 003;
...

变量总数取决于创建了多少&lt;input&gt;元素。

我正在尝试提出建议,例如:

totalphotos = document.getElementById('totalphotos').value;

for (i = 1; i <= totalphotos.length; i++) { 
    window[photoname + i] = document.getElementById('photonumb' + i).value;
}

但这对我没有帮助,它只是不会创建新变量,例如,如果我这样做 console.log(photoname1);

有人对我有建议吗?提前谢谢!

----- 编辑--- 嘿@Quentin,为什么标记为重复?也许这个问题的想法可能是相似的,但我完全以另一种方式问它,所以即使我正在寻找的答案也不同。而且,我以前看过这个问题,我无法完全理解它是如何工作的。因此对于像我这样的其他初学者来说,这个问题可能更有用。谢谢。

【问题讨论】:

  • P.S.我读过使用 eval() 不是一个好主意,所以我什至没有尝试过。也许有办法不用这个?
  • 创建动态变量不是个好主意。为什么不把所有的值都压入一个数组?

标签: javascript html variables for-loop dynamic


【解决方案1】:

window['here'] 变量未“命名”。

totalphotos = document.getElementById('totalphotos').value;

for (i = 1; i <= totalphotos.length; i++) { 
    window['photoname' + i] = document.getElementById('photonumb' + i).value;
}

还要注意,脚本会立即执行,因此您必须将脚本放在 HTML 的末尾。

【讨论】:

  • 嘿!这工作顺利!非常感谢,您的回答已被采纳。顺便说一句,我在$(document).ready(function (){中使用了这个脚本,也可以吗,还是我应该把脚本放在HTML的末尾?抱歉问了一个愚蠢的问题,我是初学者。
  • 是的,没关系!使用jQuery(function ($) { })jQuery(document).ready(function ($) { }) - 它们是相同的。
【解决方案2】:

你可能在 For 循环中有一个错误。

您正在将 i 与总照片的长度进行比较,但它已经是照片的数量

试试

for (i = 1; i <= totalphotos; i++) { this["photoname" + i] = document.getElementById('photonumb' + i).value; }

【讨论】:

  • 感谢您的建议,但仍然没有成功。我找到了使用数组的解决方案,但我希望变量为photoname1photname2 等,而不是photoname[0]photoname[1] 等。
  • 你能给我一个来自 firefox 的控制台转储吗?
  • for() 循环之后我这样做了:console.log('photoname1: ' + photoname1); 我得到了这个:ReferenceError: photoname1 is not defined index.php:452
  • 照片名从何而来? -> AHHH 我知道了...等一下
猜你喜欢
  • 2020-08-18
  • 2013-06-05
  • 2020-04-05
  • 2010-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多