2
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 进行硬编码,然后其工作正常,但我无法对 controlID 进行硬编码,因为有 1000 个控件并且每次 ID 更改时。

4

1 回答 1

0

您的代码看起来不错(除了隐含的全局变量1),您的 HTML 文档中一定还有其他问题...我也不确定为什么您要从第一次剪切中遗漏最后一个值,因为您正在交互length - 2,因为i小于(不小于 或等于),这意味着它一直到 value然后打破循环。length - 1length - 2

这是我创建的一个JSFiddle,它使用您的代码并显示一些额外的控制台消息,并将值实际应用于隐藏输入提供的输入。

1重要

我应用于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" />​

脚本也很简单(出于 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];
    }
}​
于 2012-08-08T13:52:37.663 回答