如何计算动态添加的输入?

时间:2016-11-07 03:17:55

标签: javascript jquery html

我有一个带有两个文本框的简单表单:一个用于人们"名称"另一个是他们的姓氏"。在页面上,您可以单击,它将在下面再添加两个文本框,也用于" name"和"姓氏" ..所以基本上你可以根据需要添加多对名字和姓氏。

如何计算输入数量/对("姓名"和#34;姓氏")的数量/对数

您可以在此处查看演示:http://poostudios.com/jstest2.html

以下是代码:

<html>
<head>
<script type="text/javascript" src="nutrition/jquery-3.1.1.js"></script>
<style type="text/css">
        div{
        padding:8px;
        }
</style>enter code here

</head>

<body>

<form action="results.php" method="get">


<script type="text/javascript">

$(document).ready(function(){

var counter = 2;

$("#addButton").click(function () {

var newTextBoxDiv = $(document.createElement('div'))
 .attr("id", 'TextBoxDiv' + counter);

newTextBoxDiv.after().html('<label>Name : </label>' +
  '<input type="text" name="textbox' + counter +
  '" id="textbox' + counter + '" value="" ><label> Surname : </label>' +
  '<input type="text" name="textbox' + counter +
  '" id="textbox' + counter + '" value="" >');


newTextBoxDiv.appendTo("#TextBoxesGroup");

counter++;
});

$("#removeButton").click(function () {

counter--;
$("#TextBoxDiv" + counter).remove();

});


});
</script>

<div id='TextBoxesGroup'>
<div id="TextBoxDiv1">
<label>Name : </label><input type='textbox' id='textbox1' >
<label>Surname : </label> <input type='textbox' id='textbox2' >
</div>
</div>
<input type='button' value='Add' id='addButton'>
<input type='button' value='Remove' id='removeButton'>

<input type="submit" value="Go">
</form>


</body>
</html>

4 个答案:

答案 0 :(得分:0)

有很多方法可以做到这一点。 @Tibrogargan和我已经用各种片段散布了对你的问题的评论,这些片段将在任何给定时间返回元素的数量。

但是,每次要检查计数时,您需要完全调用这些方法以获得“实时”计数 - 所以如果您只是计划检查一次输入的数量,即例如,提交表单,您需要做的就是在提交处理程序中检查计数或将计数存储在变量中:

$('form').on('submit',function(e){
  e.preventDefault();

  // store the current count in a variable (this will not change if the user adds another input)
  var current_count = $('#TextBoxesGroup input').length / 2;

  // do what you want with the current_count variable
  console.log("The user has submitted the form with " + current_count + " input fields");

});

但是,您可能不仅计划一次计算输入字段的数量。也许您正在监控用户的行为。在这种情况下,您可以定义一个函数,使事情变得更简洁。

不是使用递增/递减的计数器,而是按以下方式定义counter函数:

function counter(){
    return $('#TextBoxesGroup input').length / 2;
    /* 
      This could also be: 
        return document.getElementById('TextBoxesGroup').getElementsByTagName('input').length / 2;
    */
}

现在,每当您需要检查有多少输入对时,只需调用counter(),即可返回该值。所以,让我们假设您在用户点击某些内容时检查输入的数量 - 您的代码可能如下所示:

$('body').on('click', 'input[type=button]', function(){


  // conditionally pass the current count straight to a function which uses the data
  if ( counter() > 0 ) processMyData( counter() );

  // or, if you process the data here, then pass it on to another function
  // store the current count
  var current_count = counter();

  // do nothing if there are no input fields
  if ( current_count < 1 ) return;

  // do what you want with the count now that you have it
  myAnalytics.inputs.save( current_count );

  // do something else with it
  processMyData( current_count );      

  // etc.
});

答案 1 :(得分:0)

由于你已经使用了jquery,这就是你如何获得长度。除以2,因为每个人都有一组名称和用户名。

<script>
    var len = $('#TextBoxesGroup').find('input').length / 2;
    // Do whatever you wanted to do with the len
</script>

以下是plunker sample

答案 2 :(得分:0)

首先在你的代码中,id不是唯一的,所以我稍微修改了一下,看看下面的演示(我使用append()函数来创建标记。)

其次,因为你使用了一个计数器变量,只需用它来计算对的数量,用它除以2(counter / 2)。

var counter = 2;
$("#addButton").click(function() {
    $('<div>', {
    	id : 'TextBoxDiv' + counter
    }).append(
    	$('<label>', {
            text: 'Name : '
        }),
        $('<input>', {
            type: 'text',
            name: 'textbox' + (++counter), // increment counter for name
            id: 'textbox' + counter,
            value: ''
        }),
        $('<label>', {
            text: 'Surname : '
        }),
        $('<input>', {
            type: 'text',
            name: 'textbox' + (++counter), // increment counter for surname
            id: 'textbox' + counter,
            value: ''
        })
    ).appendTo('#TextBoxesGroup');
    
    // just divide the counter by 2 to get the pairs
    console.log('input text pairs: ' + counter/2);
});

$("#removeButton").click(function() {
    // if counter === 2 (initial) then remove nothing
    if (counter === 2) {
    	return false;
    }

    // decrement counter by 2
    // and remove the textbox container
    counter-=2;
    $("#TextBoxDiv" + counter).remove();
    console.log('input text pairs: ' + counter/2);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form action="results.php" method="get">
    <div id='TextBoxesGroup'>
        <div id="TextBoxDiv1">
            <label>Name : </label>
            <input type='textbox' id='textbox1'>
            <label>Surname : </label>
            <input type='textbox' id='textbox2'>
        </div>
    </div>
    <input type='button' value='Add' id='addButton'>
    <input type='button' value='Remove' id='removeButton'>

    <input type="submit" value="Go">
</form>

答案 3 :(得分:-1)

$(&#34; #textbox1&#34;)。length将为您提供名称文本字段的出现次数。