2016-08-15 5 views
0

사용자가 add a row 버튼을 클릭하면 usernamepassword이라는 텍스트 필드 쌍이 jsfiddle link below과 같이 표시됩니다.div에서 값을 추출하고 배열에 저장 - JSFindle 지정

사용자가 send 버튼을 클릭하여 양식을 제출하면 사용자 이름과 암호 쌍을 추출하여 배열 (키 - 값 쌍)로 저장하려고합니다. 그래서, 1 배열은 하나 또는 여러 쌍의 username-password 객체를 저장할 수 있습니다.

어떻게하면됩니까? 지금까지의 작업은 jsfiddle here에서 찾을 수 있습니다.

참고 :

var dict = {}; 

dict['username'] = "password"; 
+0

NB : 그것은 바이올린, findle하지 않고, 배열은 아니다 배열하지만 평범한 객체 ;-) – trincot

+0

'dict [ 'username2'] = "password2"; dict [ 'username3'] = "password3"; ....' – trincot

+0

것은 내게 알려지지 않은'username-password' 쌍의 수입니다. 사용자는 jsfiddle의 왼쪽 상단 모서리에있는'add a row button '을 클릭하여 추가를 계속합니다. – Illep

답변

1

복제하여 새 요소를 만들 때 고유해야하므로 ID를 변경하는 것을 잊지 마십시오. 또한 값을 재설정하는 것을 잊어 버립니다.

당신은 당신이 다음 코드에서와 같은 문제를 해결 할 수 있습니다 암호 필드에 ID를 추가하는 경우 :

$(document).ready(function() { 
 
    var counter = 1; 
 
    $("#btn").click(function() { 
 
    counter++; //Increase counter 
 
    var clonedBox = $('.input-group').eq(0).clone(); 
 
    clonedBox.find('input').attr('id', function(index, attr) { 
 
     return attr + (counter - 1); 
 
    }).val(''); 
 
    $("#boxid").append(clonedBox); 
 
    $("#boxid .countid").last().text('UserId'+counter); 
 

 
    clonedBox = $('.input-group').eq(1).clone(); 
 
    clonedBox.find('input').attr('id', function(index, attr) { 
 
     return attr + (counter - 1); 
 
    }).val(''); 
 
    $("#boxid").append(clonedBox); 
 
    }); 
 

 
    // WHEN CLICKED ON SUBMIT RETRIEVE ALL DATA\\ 
 
    $("#target").submit(function(event) { 
 
    //alert("Handler for .submit() called."); 
 

 
    var dict = {}; 
 

 
    $('#target input[id^="myid"]').each(function(i, e) { 
 
     dict[this.value] = $('#mypwdid' + ((i == 0) ? '' : i)).val(); 
 
    }) 
 

 
    console.log('Fields '+ JSON.stringify(dict)); 
 

 

 

 

 
    event.preventDefault(); 
 
    }); 
 

 
});
.input-group{ 
 
    margin-bottom: 1em; 
 
}
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script> 
 

 
<button id="btn">Add row</button> 
 
<form id="target" method="POST"> 
 
    <div id="boxid"> 
 
     <div id="boxcontainerid" class="form-group"> 
 
      <div class="input-group"> 
 
       <div class="countid input-group-addon">UserId</div> 
 
       <input type="text" class="form-control" id="myid" placeholder="username" name="1"> 
 
       <div class="input-group-addon">?</div> 
 
      </div> 
 

 
      <div class="input-group"> 
 
       <div class="input-group-addon">Password</div> 
 
       <input type="text" class="form-control" name="pwd" id="mypwdid" placeholder="password"> 
 
      </div> 
 
      <hr> 
 
     </div> 
 

 
    </div> 
 
    <button>send</button> 
 
</form>

+0

'Add a row' 버튼을 클릭하면 이전에 입력 한 텍스트가 새로 추가 된 텍스트 박스에 복사됩니다. 어떻게 내가 그걸 없앨 수 있니? – Illep

+0

이미 해결되었습니다. 너는 노력해서 나에게 알릴 수있다. – gaetanoM

1

dict 개체가 새로운 키/값 쌍의 수를받을 수 있습니다 : 이미 배열에 사용자 이름과 암호를 저장하는 방법을 알고있다. 여기

는이 조각으로, fiddle 업데이트됩니다 : 당신이 HTML에서 중복 id 속성 값을 가질 수 없습니다

$(document).ready(function() { 
 
    var counter = 1; 
 
    $("#btn").click(function() { 
 
    counter++; //Increase counter 
 
    $('.input-group').clone().appendTo("#boxid").find(':text').val(''); 
 
    $("#boxid .countid").last().text('UserId'+counter); 
 
    }); 
 

 
    // WHEN CLICKED ON SUBMIT RETRIEVE ALL DATA\\ 
 
    $("#target").submit(function(event) { 
 
    //alert("Handler for .submit() called."); 
 

 
    var dict = {}; 
 
    $("input[name=name]").each(function (i) { 
 
     dict[$(this).val()] = $('input[name=pwd]').eq(i).val(); 
 
    }); 
 
    alert(JSON.stringify(dict, null, 2)); 
 
    event.preventDefault(); 
 
    }); 
 

 
});
.input-group{ 
 
    margin-bottom: 1em; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<button id="btn">Add row</button> 
 
<form id="target" method="POST"> 
 
    <div id="boxid"> 
 
    <div id="boxcontainerid" class="form-group"> 
 
     <div class="input-group"> 
 
     <div class="countid input-group-addon">UserId</div> 
 
     <input type="text" class="form-control" name="name" placeholder="username"> 
 
     <div class="input-group-addon">?</div> 
 
     </div> 
 

 
     <div class="input-group"> 
 
     <div class="input-group-addon">Password</div> 
 
     <input type="text" class="form-control" name="pwd" placeholder="password"> 
 
     </div> 
 
     <hr> 
 
    </div> 
 

 
    </div> 
 
    <button>send</button> 
 
</form>

주, 그래서 사용자 이름 input 요소에 id 제거 대신 name="name"을 사용했습니다.

+0

나는 그것이 작동한다고 생각한다. 이 코드에는 또 다른 작은 버그가 있습니다. 행 추가 버튼을 클릭하면 이전에 입력 한 텍스트가 새로 추가 된 텍스트 상자에 나타납니다. 이 텍스트 값을 지우려면 어떻게해야합니까? – Illep

+0

두 입력 영역을 동시에 복사 한 다음 입력 영역을 찾고'val ('')'을 사용하여 입력 내용을 지울 수 있습니다 :'$ ('. input-group') .clone(). appendTo "#boxid"). find (': text') .val ('');'. 내 스 니펫을 업데이트했습니다. – trincot