<input>
HTML要素を JavaScript オブジェクトにバインドする簡単な表記法を導入したいと思います。何かのようなもの:
<script>
var qform = {
uid : "",
pass : ""
};
</script>
<form method="get" action="#">
<input id="temp0" type="text" name="uid" bind="qform.uid" />
<input id="temp1" type="password" name="pass" bind="qform.pass" />
<input type="submit" value="submit" />
</form>
<input>
s を変更すると、JS 変数が変更されます。私がそれを実装しようとしている方法は次のとおりです。
<script>
var x = 0;
for(x = 0; x < 2; x++) {
var inputField = document.getElementById("temp" + x);
var bindObj = inputField.getAttribute("bind");
var bindObjTree = bindObj.split(".");
var parent = window;
for (var i = 0; i < bindObjTree.length - 1; i++) {
parent = parent[bindObjTree[i]];
}
child = bindObjTree[bindObjTree.length - 1];
inputField.value = parent[child];
inputField.onchange = function() {
var xp = parent;
var xc = child;
xp[xc] = inputField.value;
alert(JSON.stringify(window["qform"]));
};
} // for
</script>
ただし、2 番目の入力フィールドのみが希望どおりに動作します。誰かがその理由を説明できますか? 私はそれが閉鎖と関係があると推測しています。私は解決策を見つけるのではなく、自分が間違っていることを理解しようとしています (これは JQuery で簡単に回避できますが、実際にはそうしたくありません)。