2013/09/05

使用 jQuery 動態新增表單及動態移除表單

有一個很好得學長求助,他的問題是希望能夠透過下拉式選單去動態新增表單
表單的數量則是由選取的數字去決定,特別的一點式選擇5個表單,則增加6個表單
其他則是照選取的數字而新增幾個

我這個範例呢,用文字方塊取代表單作為說明;範例程式碼包含著一個下拉式選擇以及一個div區塊,id為form

選取下拉式選單時,會觸發onchange事件,事件對應的動作為change (num)

可以由下面程式碼得知,我用index去取得使用者選取的值
從值去判斷選取數值,超過5,則必須執行六次
透過JQuery的append去新增至form id內的文字方塊,id為test+i

function change (num) {
    reload ();

    index = num.options[num.selectedIndex].value;

    switch(parseInt(index)){
     case 1:
     case 2:
     case 3:
     case 4:
      addTextArea ();
      break;
     case 5:
      index = parseInt(index) + 1;
      addTextArea ();
      break;
     default:
      break;
    }
   }


觸發事件時,我們必須清除原先新增的文字方塊,否則會重疊並造成id重複的問題
所以有另外寫一個reload的函數

reload是透過JQuery的empty做清除form底下的元素

   function reload () {

    $('#form').empty();

    switch(parseInt(index)){
     case 1:
     case 2:
     case 3:
     case 4:
      clean();
      break;
     case 5:
      index = parseInt(index) + 1;
      clean();
      break;

     default:
      break;
    }
   }

以下是程式碼:

<!DOCTYPE html>
<html lang="zh-tw">
 <head>
  <meta charset="utf-8">
  <title>Demo</title>
  <script type="text/javascript" src="http://code.jquery.com/jquery-2.0.3.min.js"></script>
  <script type="text/javascript">
   var index = 0;
   
   function change (num) {
    reload ();

    index = num.options[num.selectedIndex].value;

    switch(parseInt(index)){
     case 1:
     case 2:
     case 3:
     case 4:
      addTextArea ();
      break;
     case 5:
      index = parseInt(index) + 1;
      addTextArea ();
      break;
     default:
      break;
    }
   }

   function addTextArea () {
    for(i = 1; i <= index; i++){
     $('#form').append('<textarea placeholder=test id=test'+i+'>')
      .append('<br>');
    }
   }

   function clean () {
    for(i = 1; i <= index; i++){
     $('.test' + i).remove();
    }
   }

   function reload () {

    $('#form').empty();

    switch(parseInt(index)){
     case 1:
     case 2:
     case 3:
     case 4:
      clean();
      break;
     case 5:
      index = parseInt(index) + 1;
      clean();
      break;

     default:
      break;
    }
   }
   
  </script>
 </head>
 <body>
  <select  class="selectItem" onchange="change(this)">
   <option value="1">1</option>
   <option value="2">2</option>
   <option value="3">3</option>
   <option value="4">4</option>
   <option value="5">5</option>
  </select>
  <div id="form"></div>
 </body>
</html>

執行結果:



參考資料:
http://api.jquery.com/empty/
http://api.jquery.com/remove/
http://api.jquery.com/append/
http://api.jquery.com/clone/
http://api.jquery.com/attr/
http://edisonx.pixnet.net/blog/post/84832134
http://t.data321.cn/article-45878-1.html
http://stackoverflow.com/questions/7885639/javascript-error-document-getelementsbyid-is-not-a-function
http://www.dotblogs.com.tw/wadehuang36/archive/2010/08/25/jqueryattrclassname.aspx
http://www.w3cplus.com/jquery/attr-removeAttr
http://bigone2000.pixnet.net/blog/post/55174550
http://www.javaworld.com.tw/jute/post/view?bid=42&id=131360&tpg=1&ppg=1&sty=1
http://www.wretch.cc/blog/agreeupon/34667988