2016-06-09 2 views
0

숨겨진 입력 필드에서 배열 값을 가져와 필요한 요소를 가져올 수있는 방법은 무엇입니까?자바 스크립트가 숨겨진 입력에서 배열 값을 가져오고 있습니까?

<input type="hidden" name="digital_object[prdcls][0][prdcl_links][0][_resolved]" id="digital_object[prdcls][0][prdcl_links][0][_resolved]" value="{&quot;id&quot;:&quot;/prdcl_titles/1&quot;,&quot;title&quot;:&quot;test (test)&quot;,&quot;primary_type&quot;:&quot;prdcl_title&quot;,&quot;types&quot;:[&quot;prdcl_title&quot;],&quot;json&quot;:&quot;{\&quot;lock_version\&quot;:0,\&quot;title\&quot;:\&quot;test (test)\&quot;,\&quot;publication\&quot;:\&quot;test\&quot;,\&quot;publisher\&quot;:\&quot;test\&quot;,\&quot;created_by\&quot;:\&quot;admin\&quot;,\&quot;last_modified_by\&quot;:\&quot;admin\&quot;,\&quot;create_time\&quot;:\&quot;2016-06-07T13:20:46Z\&quot;,\&quot;system_mtime\&quot;:\&quot;2016-06-07T13:20:46Z\&quot;,\&quot;user_mtime\&quot;:\&quot;2016-06-07T13:20:46Z\&quot;,\&quot;jsonmodel_type\&quot;:\&quot;prdcl_title\&quot;,\&quot;uri\&quot;:\&quot;/prdcl_titles/1\&quot;}&quot;,&quot;suppressed&quot;:false,&quot;publish&quot;:false,&quot;system_generated&quot;:false,&quot;repository&quot;:&quot;global&quot;,&quot;created_by&quot;:&quot;admin&quot;,&quot;last_modified_by&quot;:&quot;admin&quot;,&quot;user_mtime&quot;:&quot;2016-06-07T13:20:46Z&quot;,&quot;system_mtime&quot;:&quot;2016-06-07T13:20:46Z&quot;,&quot;create_time&quot;:&quot;2016-06-07T13:20:46Z&quot;,&quot;uri&quot;:&quot;/prdcl_titles/1&quot;,&quot;jsonmodel_type&quot;:&quot;prdcl_title&quot;}"> 

나는 이것을 실행할 때 '정의되지 않은'valp를 얻습니다. 또한 숨겨진 필드에서 prdcl_link 함수가 생성되거나 변경되는 경우 실행되지 않는 문제가 있습니다.

$(document).ready(function() { 
    $("#digital_object[prdcls][0][prdcl_links][0][_resolved]").on('keyup change', prdcl_link); 
    $("#digital_object_prdcls__0__volume_num_").on('keyup change', prdcl_link); 
    $("#digital_object_prdcls__0__issue_num_").on('keyup change', prdcl_link); 

    function prdcl_link(){ 
     var valp = {}; 
     valp = $("#digital_object[prdcls][0][prdcl_links][0][_resolved]").val(); 
     console.log(valp); 
     var valv = $("#digital_object_prdcls__0__volume_num_").val(); 
     var vali = $("#digital_object_prdcls__0__issue_num_").val(); 

     var res; 
     var pub; 
     var vol; 
     var iss; 

     if (valp!=""){ 
      pub = valp['json']['publication']; 
      res = pub; 
      if (valv!=""){ 
       vol = " - Volume " + valv; 
       res = res.concat(vol); 
      } 
      if (vali!=""){ 
       if (valv!=""){ 
        iss = ", Issue " + vali; 
       } 
       else { 
        iss = " - Issue " + vali; 
       } 
       res = res.concat(iss); 
      } 
     } 


     $("#digital_object_title_").val(res); 
    }; 
}); 
+0

입력 요소의 값은 문자열이며 시도하는 것처럼 액세스 할 수 없습니다. 그러나 어떻게 지구상에서 처음에 그런 괴물로 끝내 었습니까? – Kruga

+0

나는 그 문자열에 부분적으로 만 손을 넣었다. 일부 오픈 소스 소프트웨어 용 플러그인을 작성 중입니다. –

답변

0

입력 값은 JSON 형식이지만 HTML 인코딩됩니다. 먼저 문자열을 해독해야합니다. Underscore는 unescape 기능을 가지고 있거나 다른 방법으로 검색 할 수 있습니다.

그런 다음 JSON.parse을 사용하여이를 javaScript 객체로 변환 할 수 있습니다. 하지만 당신은 오류가있어서 파싱 할 수 없습니다. 당신은 괄호 주위에 따옴표를하지 않은 경우, 그것은 유효한 것 'JSON'

...,"json":"{...}",... 

라는 이름의 물체에 몇 가지 추가 따옴표가있다. 여기서 생각한 것은 JSON 형식 (문자열)으로 변환 된 'json'객체입니다. 그런 다음이 문자열은 JSON으로 변환 된 다른 객체의 일부였습니다. 이제 따옴표가 무엇의 일부인지 구분할 수 없습니다.

관련 문제