JavaScript & jQuery 的應用(五):簡單實做動態新增TextBox

JavaScript & jQuery 的應用(五):簡單實做動態TextBox

不知道為什麼常常看到人家在問這個功能要怎麼做,其實做法有很多種,如果不需要考量太多問題(使用者接受可能會重來),利用jQuery可以輕鬆簡單的達到這個功能。

HTML的部份:我在畫面預設放了一個textbox,id是text1,以及提供新增及送出的button,另外利用hidden field來儲存目前到底有幾個textbox。這邊比較要注意的是:因為我的textbox後面都有接了一個<br/>用來換行,所以在附加新的textbox的時候,是要附加到最後一個textbox下一個dom element後面,所以我寫了:$(this).next().after(box);

<div id="ContentDiv">
    <input type="button" id="button1" value="add text" />
    <input type="submit" id="button2" value="submit" />
    <input type="hidden" id="Count" name="Count" value="2" />
    <div id="TextBoxDiv">
        <input type="text" id="text1" name="text1" value="this is text1" /><br />
    </div>
    <div id="TextValueDiv">
        <asp:Label runat="server" ID="Label1"></asp:Label>
    </div>
</div>
</form>

<script type="text/javascript">
    $(function()
    {
        $("#button1").click(addTextBox);
    });

    function addTextBox()
    {
        var cObject = document.getElementById("Count");
        var c = cObject.value;
        var box = "<input type='text' id='text" + c + "' name='text" + c + "' value='this is text" + c + "' /><br />";
        $("#TextBoxDiv > input:text:last").each(function() { $(this).next().after(box); });
        var count = Number(c) + 1;
        cObject.value = count;

    }
</script>

回到server端之後,因為不是server元件,所以必需從Request.Form中把資料接回來;因為我的count多算1,所以記得要扣回來。

**Request.Form是利用name來取值,所以記得在動態產生textbox的時候必需給name。

{
    int count = 1;
    Label1.Text = "";
    if (IsPostBack)
    {
        Int32.TryParse(Request.Form["Count"], out count);
        StringBuilder sb = new StringBuilder();
        count = count - 1;
        sb.Append("There are " + count + " TextBox<br/>");
        for (int i = 0; i < count; i++)
        {
            string name = "text" + i;
            string value = Request.Form[name];

            sb.AppendFormat("name:{0} value:{1}<br/>", name, value);
        }
        Label1.Text = sb.ToString(); ;
    }
}

按下add text會一直增加:

image

submit之後的結果:

 image

DotBlogs 的標籤:,