2015-01-29 5 views
0

미리 감사드립니다.동적 필드가있는 이메일을 통해 양식을 제출하십시오.

코드가 올바르게 작동하지만 모든 입력 이름이 같으면 각 새 줄을 내 .asp 메일 처리기로 전달하는 방법을 모르겠습니다. 내 코드에서 정확하게 입력 상자를 인덱싱하여 제출하는 동안 고유하게 호출 할 수 있도록하고 전자 메일 .asp 메일 처리기로 전자 메일을 보낼 수 있습니까?

지금까지 작성한 코드 문제를 해결할 수 있도록 도와 주신 stackoverflow 커뮤니티에 감사드립니다.

HTML

<form role="form" action="/wohoo" method="POST"> 
    <label>Item</label> 
    <div class="catalog-fieldset"> 
     <div class="catalog-wrapper"> 
      <div class="catalog-items"> 
       <ul> 
        <li>Quantity: 
         <input type="text" size="5" name="Qty[]"> 
        </li> 
        <li>Width: 
         <input type="text" size="5" name="Width[]"> 
        </li> 
        <li>Height: 
         <input type="text" size="5" name="Height[]"> 
        </li> 
       </ul> 
       <button type="button" class="remove-line">Remove</button> 
      </div> 
     </div> 
     <button type="button" class="add-field">Add More...</button> 
    </div> 
</form> 

CSS

ul { 
    list-style: none; 
    display:inline-block; 
    margin:0 0 5px; 
} 
ul li { 
    display: inline-block; 
} 
.remove-line { 
    display:inline-block; 
} 

이 코드는 현재 설정 주어진 http://jsfiddle.net/KeithDickens/afqh4a5o/2/

$(document).ready(function() { 
var max_fields = 10; //maximum input boxes allowed 
var x = 1; //initlal text box count  

$('.catalog-fieldset').each(function() { 
    var $wrapper = $('.catalog-wrapper', this); 

    $(".add-field", $(this)).click(function (e) { 
     e.preventDefault(); 
     if (x < max_fields) { //max input box allowed 
      x++; //text box increment   
      $('.catalog-items:first-child', $wrapper).clone(true).appendTo($wrapper).find('input').val('').focus(); 
     } 
    }); 
    $('.catalog-items .remove-line', $wrapper).click(function() { 
     x = x - 1; //initlal text box count  
     if ($('.catalog-items', $wrapper).length > 1) $(this).parent('.catalog-items').remove(); 
    }); 
}); 
}); 
+0

귀하의 질문은 실제로 "이메일을 통해 양식 제출"과 관련이 없으며 $ ('. catalog-fieldset')를 통해 이미 수행하고있는 "자식 제어 반복"방법에 불과합니다. 각 입력의 위치를 ​​알면 색인을 통해 참조 할 수 있습니다. 그것은 컨트롤을 사용하여 데이터 구조를 구축함으로써 바깥의 방식으로 진행될 것이라고 말했습니다. Knockout.js와 같은 것을 체크 아웃하면 UI가 모델에서 구동되도록 뷰 모델을 먼저 설정합니다. – rism

+0

나는 확실히 녹아웃을 조사 할 것이다. 하지만 내 코드를 기반으로 필요한 것을 성취 할 방법이 없다고 말하고 있습니까? 동적으로 생성 된 필드의 값을 입력 이름별로 asp 메일 파일에 전달할 방법이 없습니다. –

답변

0

읽기 값이 단순히 위치에 따라 할 것입니다 설정했습니다. 당신이 위치를 변경 한 경우에는 암호를 해독하기 때문에이 몹시 취성하지만 기존 추가 자세히 버튼 아래에

<button type="button" class="summarise">Summarise</button> 

를 추가했다 아래에 무엇을 위해 자바 스크립트를 교체하는 경우 그것은 당신에게 시작 이상을 제공해야 . 유효성 확인 등을 적용해야합니다.

$(document).ready(function() { 
    var max_fields = 10; //maximum input boxes allowed 
    var x = 1; //initlal text box count  

    function LineItemViewModel() { 
     var self = this; 
     self.Qty = 0; 
     self.Width = 0; 
     self.Height = 0; 
    } 

    function CollectionViewModel() { 
     var self = this; 
     self.Items = []; 
    } 
    var collection = new CollectionViewModel(); 

    $('.catalog-fieldset').each(function() { 
     var $wrapper = $('.catalog-wrapper', this); 

     $(".add-field", $(this)).click(function (e) { 
      e.preventDefault(); 
      if (x < max_fields) { //max input box allowed 
       x++; //text box increment   
       $('.catalog-items:first-child', $wrapper).clone(true).appendTo($wrapper).find('input').val('').focus(); 
      } 
     }); 

     $(".summarise", $(this)).click(function (e) { 
      var txts = $('.catalog-fieldset input[type=text]'); 
      var item = new LineItemViewModel(); 
      txts.each(function() { 
       switch($(this).attr("name")){ 
        case "Qty[]": 
         item.Qty = $(this).val(); 
         break; 
        case "Width[]": 
        item.Width = $(this).val(); 
        break; 
        case "Height[]": 
        item.Height = $(this).val(); 
        collection.Items.push(item); 
        item = new LineItemViewModel(); 
        break;   
       } 
      }); 
      alert(collection.Items.length); 
     }); 

     $('.catalog-items .remove-line', $wrapper).click(function() { 
      x = x - 1; //initlal text box count  
      if ($('.catalog-items', $wrapper).length > 1) $(this).parent('.catalog-items').remove(); 
     }); 
    }); 
}); 

위를 할 수있는 청소기/짧은/더 간결 가지 방법이 있지만이 방법은 매우 자기 설명해야한다.

+0

도와 주셔서 감사합니다. 나는이 경로를 훨씬 더 좋아하지만 실제로는 페이지를 폐기하고 때로는 전혀 새로운 것을 시작합니다. 그 중 하나는 10 년 전 최고 수준이었던 자바 스크립트 기술을 처음부터 다시 시작하는 것입니다. 그러나 코딩은 자전거를 타거나 사용하거나 잃어 버리는 것과는 다릅니다. –

관련 문제