动态添加html字段,然后乘以选择值并加总

时间:2014-06-30 15:07:27

标签: javascript jquery forms

我有一个简单的表单,包含两个文本字段和两个选择字段,允许用户动态添加另一组输入。
将两个选择字段相乘,并显示结果。

我需要的是能够根据需要添加任意数量的行,并将每行的选择值相乘,然后将总数相加。

E.G。 (q和s是选择值)

q1 * s1 = z1  
q2 * s2 = z2  
q3 * s3 = z3  
total = z1+z2+z3

但这是动态的,所以可能有100个值,或者可能有2个。

到目前为止,这是我的代码;

<form>
  <div id="addinput"> <span>
    <input type="text" id="p_new_1" size="20" name="p_new_1" value="" />
    <select id="q_new_1" name="q_new_1">
      <option value="1">1</option>
      <option value="2">2</option>
      <option value="3">3</option>
    </select>
    <input type="text" id="r_new_1" size="20" name="p_new_1" value="" />
    <select id="s_new_1" name="s_new_1">
      <option value="4">4</option>
      <option value="5">5</option>
      <option value="6">6</option>
    </select>
    <a href="#" id="addNew">Add</a> <br />
    </span> </div>
</form>

//脚本

<script  src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js">    </script>
<script type="text/javascript">
$(function() {
    var addDiv = $('#addinput');
    var i = $('#addinput').size() + 1;
    $('#addNew').live('click', function() {
        $('<span><input type="text" id="p_new_' + i +'" size="20" name="p_new_' + i +'"     value="" /><select id="q_new_' + i +'" name="q_new' + i +'"><option value="1">1</option><option value="2">2</option><option value="3">3</option></select><input type="text" id="r_new_' + i +'" size="20" name="r_new_' + i +'" value="" /><select id="s_new_' + i +'" name="s_new' + i +'"><option value="4">4</option><option value="5">5</option><option value="6">6</option></select><a href="#" id="remNew">Remove</a><br /></span>').appendTo(addDiv);
        i++;
        return false;
    });
    $('#remNew').live('click', function() {
        if( i > 2 ) {
        $(this).parents('span').remove();
        i--;
        }
        return false;
    });
});
var x, y, z;
x = document.getElementById("q_new_1"),
xvalue = x.value;
y = document.getElementById("s_new_1"),
yvalue = y.value;
z = xvalue * yvalue;
document.write (z);

1 个答案:

答案 0 :(得分:0)

我首先要构建HTML行:

<div class="inputs">
    <input type="text" name="p_new_3" size="20" value="" />
    <select name="q_new_3">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option></select>
</div>

然后你可以在click事件中循环遍历行,并总结他们孩子的值,如下所示:

$("#getTotal").click(function() {
    $(".inputs").each(function() {
       textValue = parseFloat($(this).find("input").val());
       selectValue = parseFloat($(this).find("select").val());
       total += textValue * selectValue;
        $("#total").html(total);
    });
});

这是a working jsfiddle demo

<form>
    <div id="addinput">

<div class="inputs">
    <input type="text" name="p_new_1" size="20" value="" />
    <select name="q_new_1">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option></select>
</div>

<div class="inputs">
    <input type="text" name="p_new_2" size="20" value="" />
    <select name="q_new_2">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option></select>
</div>

<div class="inputs">
    <input type="text" name="p_new_3" size="20" value="" />
    <select name="q_new_3">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option></select>
</div>

<a href="#" id="addValues">Add</a> -
<a href="#" id="getTotal">Get total</a>

Total: <span id="total"></span>
<br />

</div>
</form>

使用Javascript:

var total = 0.0;

$(function() {
    var addDiv = $('#addinput');
    var i = $('#addinput').size() + 1;
    $('#addNew').live('click', function() {
         $('#addinput').append('<div class="inputs"><input type="text" name="p_new_' + i + '" size="20" value=""><select name="q_new_' + i + '"><option value="1">1</option><option value="2">2</option><option value="3">3</option></select></div>');
         i++;
     return false;
    });

    $('#remNew').live('click', function() {
         if( i > 2 ) {
             $(this).parents('span').remove();
             i--;
         }
         return false;
    });

    $("#getTotal").click(function() {
        $(".inputs").each(function() {
           textValue = parseFloat($(this).find("input").val());
           selectValue = parseFloat($(this).find("select").val());
           total += textValue * selectValue;
            $("#total").html(total);
        });
    });
});