2017-11-04 21 views
0

我遇到了一个有趣的情况,我想知道这是一个非常简单的解决方案(换句话说,一个有经验的开发人员将如何处理这个问题)。JS - 一种在迭代中获取变量值而不是引用的方法?

for(i = Math.min(storedAry.length,3)-1; i >=0; i--){ 
    var currentElementName = storedAry[i][1]; 
    var currentElementID = storedAry[i][0]; 
    var window_location = `BusTracking.html?id=${currentElementID}&name=${currentElementName}`; 
    document.getElementById('recents').innerHTML+=`<button type="button" class="btn btn-success" style='margin-bottom:20px;' onclick="window.location = window_location">${currentElementName}</button><br/>`; 

} 

我遍历一个数组,并设置按钮重定向到相应的URL点击。但是,这个脚本会设置window.location = window_location,这是在用户点击按钮时进行评估的,所以无论点击哪个按钮,它都会使用户进入页面点击时的值(这里是window_location的值)循环的最后一次迭代)。

我在想如何强制每次运行for循环时评估这个变量。当访问window_location时,可能的解决方案可能是访问数组,但我觉得应该有一种“类似于PHP”的方式来执行此操作。

+0

不是当您使用内联事件处理程序。 'window.location = window_location'在全局范围内进行评估,并且只能有一个全局'window_location'变量。 –

+0

@FelixKling,所以在每次迭代时都没有办法展开'window_location'?例如,Mathematica具有“Evaluate”函数来完成此操作。 – rb612

+0

那么,一种解决方案是在按钮被点击但迭代期间不评估'window_location'。您可以对其他变量执行完全相同的操作:将它们的值嵌入模板文字中:'\'... onclick =“window.location ='$ {window_location}'”... \''。现在当任何按钮被点击时,'window.location ='BusTracking.html?...''被执行。 –

回答

1

您可以简单地将变量的值替换为模板字符串。

document.getElementById('recents').innerHTML+=`<button type="button" class="btn btn-success" style='margin-bottom:20px;' onclick="window.location = '${window_location}'">${currentElementName}</button><br/>`; 
+0

非常感谢 - 没有意识到嵌套字符串允许这个! – rb612

+0

你认为'window_location'和'currentElementName'之间的区别是什么,它允许你替换后者? – Barmar

+0

我的文本编辑器没有为前者嵌入3个字符串(外部字符串,onclick字符串和最里面的字符串)进行语法高亮显示,所以我认为它是嵌套的,所以不会评估。 – rb612

相关问题