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进行硬编码,然后它的工作正常,但我不能硬编码controlsID,因为有1000个控件,每次ID更改。
答案 0 :(得分:0)
您的代码似乎很好(除了隐含的全局 1 ),您的HTML文档中还必须有其他问题...我也不确定为什么您要从第一次剪切中遗漏最后一个值,因为您正在与length - 2
进行交互,因为i
小于 length - 1
(不是小于或等于)这意味着它会一直到值length - 2
,然后打破循环。
这是我创建的JSFiddle,它使用您的代码并显示一些额外的控制台消息,并实际将值应用于隐藏输入提供的输入。
我已将var
应用于您的变量,因此他们不会暗示全局,这应该始终避免,因为他们只是隐藏错误的邪恶朋友。
HTML非常简单,但我确实有两个ID都在隐藏字段的复合值中处理的元素:
<input type="hidden" id="hidden" value="me@-@Rob@-@text@#@you@-@Mike@-@text" />
<input id="me" value="name" />
<input id="you" value="name" />
脚本也很简单(在DOM上运行,准备好JSFiddle简单原因):
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];
}
}