HTML <input>
요소를 JavaScript 개체에 바인딩하는 간단한 표기법을 소개하고자합니다. 다음과 같이하십시오 :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>
의 변경으로 인해 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>
그러나 두 번째 입력 필드 만 원하는대로 동작합니다. 누군가가 왜 그런지 설명 할 수 있습니까? 클로저와 관련이 있다고 생각합니다. 정말 솔루션을 찾는 것보다 내가 잘못하고있는 것을 이해하려고합니다. JQuery를 사용하여이 문제를 쉽게 해결할 수 있지만 실제로는 필요하지 않습니다.
bind는 유효한 속성 이름이 아닙니다. 대신 데이터 바인딩을 사용하십시오. –
당신의 경우, 당신이 바인드하고자하는 객체 참조를 얻기 위해'eval'을 사용하지 않는 이유는 무엇입니까? 당신이하고있는 일은 매우 어려워이 경우에는 성과가 떨어집니다. 'eval'에 몇 가지 제약이 있습니까? –
@GabrielGartz는 역사적으로 나는 eval을 피했고, 코드를 사용하여 eval을 사용할 수 없을 것입니다. 그러나 위의 예에서는 eval이 더 나은 선택임을 동의합니다. – tinkerbeast