根据文本框的值创建文本框

时间:2013-05-02 00:50:52

标签: javascript jquery html ajax

基本上我想要做的是在页面上有一个文本框。当用户输入一个数字时,它应该在它下面自动生成X个额外的文本框。

我已经能够根据下拉框使其工作,但下拉框不适用于此应用程序。

<html>

<head>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://code.jquery.com/ui/1.10.1/jquery-ui.js"></script>
<script>

$(document).ready(function(){
$("#ppl").change(function(){

    // The easiest way is of course to delete all textboxes before adding new ones
    //$("#holder").html("");

    var count = $("#holder input").size();
    var requested = parseInt($("#ppl").val(),10);

    if (requested > count) {
        for(i=count; i<requested; i++) {
        var $ctrl = $('<input/>').attr({ type: 'text', name:'text', value:'text'});        
            $("#holder").append($ctrl);
        }
}
    else if (requested < count) {
        var x = requested - 1;
        $("#holder input:gt(" + x + ")").remove();
    }
});
});
</script>

</head>
<body>
<SELECT id="ppl">
            <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>
            <option value="6">6</option>
            <option value="7">7</option>
            <option value="8">8</option>
            <option value="9">9</option>
            <option value="10">10</option>
</SELECT>
<div id="holder"></div>
</body>
</html>

还有另一种方法可以使用ajax而不是jquery做这样的事情吗?

演示:Fiddle

2 个答案:

答案 0 :(得分:2)

我再次更新了你的小提琴,因为你的小提琴将所有内容都放在HTML部分中。 jsFiddle

要为它们提供所有唯一名称,您需要做的就是将索引(i)连接到名称字段的末尾,如下所示:

for (i = count; i < requested; i++) {
  var $ctrl = $('<input/>').attr({
                type: 'text',
                name: 'text' + i,
                value: 'text'
            });
  $("#holder").append($ctrl);
}

这将为您提供唯一的名称:(“text1”,“text2”,..等等)。我已经在更新的小提琴中为你改变了它。

我同意@Barmar谈到你的AJAX问题时,除了你需要获得只有服务器可以提供的数据之外,没有必要再做一个额外的服务器请求。它只是在等式中增加了另一个因素,可能会减慢速度。如果JavaScript可以为您完全相同,但在客户端而不是在服务器端,它绝对是一个更快的选择。

答案 1 :(得分:0)

这是一个类似的解决方案。如果从Ajax获得所需的盒子数,那么您只需要调用'generateTextBoxes'函数。

<html>
<head>
    <script type="text/javascript" src="jquery-1.9.js"></script>
    <script>
        var generateTextBoxes = function( qty, container ) {
            if (container) {
                for (var i = 1; i <= qty; i++ ) {
                    $('<label for="box-'+i+'">Box '+i+'</label>&nbsp;<input id="box-'+i+'" name="box-'+i+'" type="text" /><br>').appendTo( container );
                }
            }
        }
        var init = function() {
            $('#btnGenBoxes').on('click', function() {
                generateTextBoxes( $('#box-0').val(), $('#putThemHere') );
            });
        }
        window.onload = init;
    </script>
</head>
<body>

    <label for="box-0" />How many?</label> &nbsp;
    <input type="text" id="box-0" name="box-0" />
    <br>
    <input type="button" id="btnGenBoxes" value="Generate text boxes" />
    <br><br>
    <div id="putThemHere"></div>

</body>
</html>