我正在制作简单的计算器,并尝试通过jQuery添加更多行,但是它们不起作用。为什么其他行不起作用?



$('.product').keyup(function() {
  var total = (this.value * $(this).next('.qty').val()) || 0;
  $(this).next().next('.total').val(total);
  var dis = (total * $(this).next().next().next('.dis').val() / 100) || 0;
  var grand = (total - dis) || 0;
  $(this).next().next().next().next('.grand').val(grand);
}).keyup();

$('.qty').keyup(function() {
  var total = (this.value * $(this).prev('.product').val()) || 0;
  $(this).next('.total').val(total);
  var dis = (total * $(this).next().next('.dis').val() / 100) || 0;
  var grand = (total - dis) || 0;
  $(this).next().next().next('.grand').val(grand);
}).keyup();

$('.dis').keyup(function() {
  var total = ($(this).prev('.total').val()) || 0;
  var dis = (total * this.value / 100) || 0;
  var grand = (total - dis) || 0;
  $(this).next('.grand').val(grand);
}).keyup();

$(document).ready(function() {
  $("#btn1").click(function() {
    $(".tableblock").append('<div class="w-100 d-none d-md-block"></div><input type="text" onkeydown="return ( event.ctrlKey || event.altKey || (47<event.keyCode && event.keyCode<58 && event.shiftKey==false) || (95<event.keyCode && event.keyCode<106) || (event.keyCode==8) || (event.keyCode==9) || (event.keyCode>34 && event.keyCode<40) || (event.keyCode==46) )" id="product" class="product" name="fir" /> <input type="text" id="qty" class="qty" name="qty" value="1" /> <input type="text" id="total" class="total" name="total" readonly/> <input type="text" id="dis" class="dis" name="dis" value="20" maxlength="2"/> <input type="text" id="grand" class="grand" name="grand" readonly/>');
  });
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="tableblock">
  <input type="text" onkeydown="return ( event.ctrlKey || event.altKey
                    || (47<event.keyCode && event.keyCode<58 && event.shiftKey==false)
                    || (95<event.keyCode && event.keyCode<106)
                    || (event.keyCode==8) || (event.keyCode==9)
                    || (event.keyCode>34 && event.keyCode<40)
                    || (event.keyCode==46) )" id="product" class="form-control product" name="fir" />
  <input type="text" id="qty" class="form-control qty" name="qty" value="1" />
  <input type="text" id="total" class="form-control total" name="total" readonly/>
  <input type="text" id="dis" class="form-control dis" name="dis" value="20" maxlength="2" />
  <input type="text" id="grand" class="form-control grand" name="grand" readonly/>


</div>
<button id="btn1" class="btn btn-primary">+</button>

最佳答案

由于下一行是动态附加的(在DOM之后),因此您需要使用.on



$(document).on('keyup', '.product', function() {
  var total = (this.value * $(this).next('.qty').val()) || 0;
  $(this).next().next('.total').val(total);
  var dis = (total * $(this).next().next().next('.dis').val() / 100) || 0;
  var grand = (total - dis) || 0;
  $(this).next().next().next().next('.grand').val(grand);
}).keyup();

$(document).on('keyup', '.qty', function() {
  var total = (this.value * $(this).prev('.product').val()) || 0;
  $(this).next('.total').val(total);
  var dis = (total * $(this).next().next('.dis').val() / 100) || 0;
  var grand = (total - dis) || 0;
  $(this).next().next().next('.grand').val(grand);
}).keyup();

$('.dis').on('keyup', function() {
  var total = ($(this).prev('.total').val()) || 0;
  var dis = (total * this.value / 100) || 0;
  var grand = (total - dis) || 0;
  $(this).next('.grand').val(grand);
}).keyup();

$(document).ready(function() {
  $(document).on('click', "#btn1", function() {
    $(".tableblock").append('<div class="w-100 d-none d-md-block"></div><input type="text" onkeydown="return ( event.ctrlKey || event.altKey || (47<event.keyCode && event.keyCode<58 && event.shiftKey==false) || (95<event.keyCode && event.keyCode<106) || (event.keyCode==8) || (event.keyCode==9) || (event.keyCode>34 && event.keyCode<40) || (event.keyCode==46) )" id="product" class="product" name="fir" /> <input type="text" id="qty" class="qty" name="qty" value="1" /> <input type="text" id="total" class="total" name="total" readonly/> <input type="text" id="dis" class="dis" name="dis" value="20" maxlength="2"/> <input type="text" id="grand" class="grand" name="grand" readonly/>');
  });
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="tableblock">
  <input type="text" onkeydown="return ( event.ctrlKey || event.altKey
                    || (47<event.keyCode && event.keyCode<58 && event.shiftKey==false)
                    || (95<event.keyCode && event.keyCode<106)
                    || (event.keyCode==8) || (event.keyCode==9)
                    || (event.keyCode>34 && event.keyCode<40)
                    || (event.keyCode==46) )" id="product" class="form-control product" name="fir" />
  <input type="text" id="qty" class="form-control qty" name="qty" value="1" />
  <input type="text" id="total" class="form-control total" name="total" readonly/>
  <input type="text" id="dis" class="form-control dis" name="dis" value="20" maxlength="2" />
  <input type="text" id="grand" class="form-control grand" name="grand" readonly/>


</div>
<button id="btn1" class="btn btn-primary">+</button>

关于jquery - 简单的计算器添加更多行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50549768/

10-11 20:06