function ProvideValue(){
Values = document.getElementById('HiddenValue').value;
FirstCut = Values.split("@#@"); // This will return the array ID@-@VALUE@-@TYPE
var CtrlId;
for (i = 0; i < FirstCut.length - 1; i++) {
Strings = FirstCut[i];
SecondCut = Strings.split("@-@");
if(SecondCut[2].match("TEXT")) {
CtrlId = "" + SecondCut[0];
document.getElementById(CtrlId).value = SecondCut[1];
}
}
}
这是我的代码而不是 Id,我可以打印它。但是 CtrlId 不会被实际值替换。我收到错误 document.getElementById(CtrlId).value is NULL
。我尝试对 ID 进行硬编码,然后它工作正常,但我无法对控件 ID 进行硬编码,因为有 1000 个控制,并且每次 ID 都会发生变化。
最佳答案
你的代码看起来不错(除了隐含的全局变量1),你的HTML文档中一定还有其他问题......我也不确定为什么你由于您要与 length - 2
进行交互,因此省略了第一次剪切中的最后一个值,因为 i
小于 length - 1
(不是小于或等于),这意味着它一直到值length - 2
,然后打破循环。
这是一个JSFiddle我创建的它使用您的代码并显示一些附加的控制台消息,并实际将值应用于隐藏输入提供的输入。
1重要
我将 var
应用于您的变量,因此它们不是隐含的全局变量,应该始终避免它们,因为它们只不过是隐藏错误的邪恶 friend 。
我使用的代码
HTML 非常简单,但我确实有两个带有 ID 的元素,这些 ID 在隐藏字段的复合值中被寻址:
<input type="hidden" id="hidden" value="me@-@Rob@-@text@#@you@-@Mike@-@text" />
<input id="me" value="name" />
<input id="you" value="name" />
脚本也很简单(出于 JSFiddle 简单性原因,在 DOM 上运行):
var vals = document.getElementById('hidden').value;
var firstCut = vals.split("@#@");
for(var i = 0; i < firstCut.length; i++) {
var ctrl = firstCut[i].split("@-@");
if (ctrl[2].match("text")) {
var id = ctrl[0];
document.getElementById(id).value = ctrl[1];
}
}
关于javascript - 在 Javascript 中,显示的不是值而是变量名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11865699/