>  기사  >  웹 프론트엔드  >  JavaScript는 eval 함수를 교묘하게 사용하여 양식 입력 항목을 json 개체_javascript 기술로 조합합니다.

JavaScript는 eval 함수를 교묘하게 사용하여 양식 입력 항목을 json 개체_javascript 기술로 조합합니다.

WBOY
WBOY원래의
2016-05-16 15:29:511539검색

이 기사의 예에서는 JavaScript가 eval 함수를 교묘하게 사용하여 양식 입력 항목을 json 객체로 조합하는 방법을 설명합니다. 참고하실 수 있도록 모든 사람과 공유하세요. 자세한 내용은 다음과 같습니다.

Ajax를 사용하여 웹 개발을 하다 보면 양식 입력 항목을 수집하여 json 개체를 만든 후 저장한 다음 해당 개체를 서버에 직접 게시하는 시나리오를 자주 접하게 됩니다.

기존 접근 방식은 js에서 다음과 유사한 코드를 작성하는 것입니다.

var myObj = {}; 
myObj.x = document.getElementById("x").value; 
myObj.y = document.getElementById("y").value;
//... 
//然后ajax post或get提交

양식 요소가 많지 않으면 괜찮지만, 양식에 수십 개 이상의 입력 항목이 있는 경우 이런 종류의 코드를 작성하는 것은 너무 힘들 것입니다.

다행히도 JavaScript에는 다음과 같은 C# 리플렉션과 유사한 일부 작업을 완료하는 데 도움이 되는 사악한 평가 기능이 있습니다.

eval('A={}');
if (A.b==undefined)
{
 A.b = {};
}
eval('A.b.c = 1');
alert(A.b.c);

이런 방식으로 복합 객체 A를 동적으로 생성합니다. 원리를 이해한 후 형식을 몇 가지 개선할 수 있습니다.

运单号:<input type="text" name="AwbPre" value="112" style="width:40px"/>-<input type="text" name="AwbNo" value="12312311"/><br/>
结算方式:
<select name="SettlementMode" style="width:100px">
 <option value="CASH" selected="selected">现金</option>
 <option value="MONTH">月结</option>
</select>
<br/>
不需要赋值的属性:<input type="input" name="NotMe" value="NotMe ..." isModel="false"/>
<script type="text/javascript">
function setFormModel(modelName){
  eval(modelName + "={}");
  var inputArr = document.getElementsByTagName("INPUT");
  for(var i=0;i<inputArr.length;i++){
   var isModel = inputArr[i].getAttribute("isModel");
   var itemName = inputArr[i].name;
   var itemValue = inputArr[i].value;   
   if(isModel!="false"){
    eval(modelName + "." + itemName + "='" + itemValue + "';");
   }   
  }
  var selectArr = document.getElementsByTagName("SELECT");
  for(var i=0;i<selectArr.length;i++){
   var isModel = selectArr[i].getAttribute("isModel");
   var itemName = selectArr[i].name;
   var itemValue = selectArr[i].value;  
   if(isModel!="false"){
    eval(modelName + "." + itemName + "='" + itemValue + "';");
   }   
  }
  return modelName;  
}
setFormModel("AwbModel");
alert("单号:" + AwbModel.AwbPre + "-" + AwbModel.AwbNo + "\n结算方式:" + AwbModel.SettlementMode + "\n不该有的属性:" + AwbModel.NotMe);
</script>

이런 식으로 양식 요소의 name 속성이 올바르게 설정되어 있으면 양식 개체를 수집해야 할 때 setFormModel 함수를 호출하여 json 개체를 빠르게 가져올 수 있습니다(물론 이는 예시일 뿐입니다. 첫 번째 수준 속성만 처리됩니다. 여러 수준 속성이 있는 경우 직접 확장할 수 있습니다. 문자열에 대해 몇 가지 기사를 작성하는 것 외에는 아무것도 없습니다.)

이 기사가 JavaScript 프로그래밍에 종사하는 모든 사람에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.