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 をハードコーディングしてから正常に動作しようとしましたが、何千ものコントロールがあり、ID が変更されるたびに controlID をハードコーディングできません。

4

1 に答える 1

0

コードは問題ないようです(暗黙のグローバル1は別として)、HTMLドキュメントに他の問題があるはずです...また、対話しているので、最初のカットから最後の値を除外している理由もわかりません。length - 2iより小さい length - 1以上length - 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 に答える