개발 Q&A

제목 jquery 의 ajax 를 사용하여 동적으로 form 객체 생성시 DOM 컨트롤 관련 질문.
글쓴이 내안의다른삶 작성시각 2014/11/12 12:45:18
댓글 : 2 추천 : 0 스크랩 : 0 조회수 : 23583   RSS
안녕하세요. 

codeigniter 를 사용해서 여러 페이지를 만들어보고 있습니다. 
ajax를 이용해서 form 객체를 동적으로 페이지에 추가하는 기능을 만들어 보고 있는데요. 

form 의 기본형식이 만들어져 있는 view 를 만들어두고 
페이지에서 버튼 클릭시 ajax를 통해서 controller의 함수로 넘어가서
form 의 기본 정보인 value 값이나 input type 등등을 설정해서 
view 의 form 에 입력하여 그 결과 값(html 소스)을
다시 ajax에서 맨처음의 페이지에  $("#center").html(msg); 이런식으로 받아서 넣는 
방식으로 만들었습니다. 

그랬더니 해당폼의 input 객체의 값이 submit 시 넘어가질 않네요. ;; 
id 값으로 직접 해당 객체로의 접근은 되지만 
jquery submit 함수나 일반 submit 방식으로도 해보았지만 되질 않습니다. 

새로 생성한 form 에서 클릭 이벤트로 form 의 input 객체를 
var frm = document.forms[formname];
alert(frm.length); 
위 방법으로 체크해봤더니 0 이 나오네요. 

찾아보다보니 jquery 의 appendChild 함수를 찾았는데 
사용하려고보니 createElement 로 javascript 에서
객체 생성시 각각 사용하는 방식인 것 같아 애매하네요.

혹시 위와 같은 상황에 대한 조언 부탁드려도 될까요. 

긴글 읽어주셔서 감사합니다. 좋은 하루되세요 ^^



------------------------------------------------------------

시작 페이지 소스

<div> 
<input type="button" value="입력" onclick="insert_input(this)">
</div>

<div id=center> </div>


ajax 자바스크립트 소스 

function insert_input(menu)
{
    var obj = $(menu);
    var data = menu.id;

    $.ajax(
    {
       type: "POST",
       url: "inputform_make",
       data: {data:data},
       success: function(msg){
              $("#center").html(msg);
       }
    });    
}


컨트롤러 소스
  
public function inputform_make()
{
    $id = $this->input->post('data');

    $this->load->view('input_form_v',$id);     
}


뷰 소스

<form method="post" name="modify" id="submintform" action="form_input_page">
    <input class="input" type="text" name="input_n0" value=<?=$id;?>>
    <input type="button" class="search" value = "입력" onclick="submit(this)">
</form>

submit 자바스크립트 소스

function submit(menu)
{
    var formid = $(menu).closest('div').find('form').attr('id');
    var frm = document.forms[formname];
    var form_input = document.getElementById('formid');
    var nodeList = document.getElementsByTagName("input");
    var nodeArray = [];

    for (var i = 0; i < nodeList.length; ++i) {
        form_input.appendChild(nodeList[i]);
    }

    frm.submit();
    
}
 다음글 크롬 개발자도구 한글화로 변경은 못하나요~?
 이전글 CSS 문법에 대해 질문 드립니다. (3)

댓글

한대승(불의회상) / 2014/11/13 06:59:52 / 추천 0
질문이 올라 왔는데 하루가 지나도 적절한 답변이 없군요.
도움을 주고 싶지만 위 내용을 보면 어떻게 도움을 줘야 할 지 모르겠네요.

아무래도 질문 방법에 문제가 있나 봅니다.
내안의다른삶 / 2014/11/13 11:41:28 / 추천 0
추가된 소스의 submit 의 노랑배경의 소스를 추가하여 
원하던 목적을 이루었습니다. 

 위 소스에서
기존에 ajax로 새로 추가된 form의 input 의 값이
submit 시 넘어가지 않는 문제가 있어서 문의한 글이었습니다. 
글솜씨가 그닥 좋지 않아 소스로 올리는게 보기 편할까 싶어
대략적인 소스를 적어보았습니다. 

제가 해결한 방법이 올바른 방법인지는 모르겠지만 
ajax로 form 생성시 appendchild 로 객체를 기존 문서에 추가를 알려주려고 하니
여러가지 소스가 바뀌어야 하는 부분이 많아서 
submit 에서 처리하니 특별한 변경 없이 잘 동작하네요. 

혹시 위의 방법말고 다른 좋은 방법이 있다면 알려주시면 감사하겠습니다. 
해결은 했지만 뭔가 더 좋은 방법이 있을것 같은 느낌입니다. ㅎㅎ 

읽어주신 한대승님 감사합니다. ^^