【问题标题】:Jquery: calculation in each row of a table showing same result in each rowJquery:在表格的每一行中计算,在每一行中显示相同的结果
【发布时间】:2016-09-12 04:18:54
【问题描述】:

我有一个带有动态功能的表来添加行。这意味着用户可以添加任意数量的结果。

这些行有一个选择字段和一个文本输入字段。当用户从选择字段中选择一个值时,文本输入字段将填充 Ajax 调用给出的结果与表单上的另一个输入字段相乘。

我得到了结果,但问题是每行中的每个文本输入都填充了相同的结果。

这是我的代码: HTML

<table>
<tr class="items2"><td><select id="Account" value="1">ajax text</td><td><input  class "amount"/></td></tr>
<tr class="items2"><td><select id="Account-1" value="2">ajax text</td><td><input  class "amount"/></td></tr>
</table>

jquery:

<script>
            $("select[id*='Account']").change(function(){
            subjectId=$(this).val();
            console.log(subjectId);
            var sale=$("#id_sale").val();
                        console.log(sale);

            request_url = '{% url "taxrate" pk=0 %}'.replace('0', subjectId);
            console.log( "request_url = " + request_url);
            $.ajax({
                            url: request_url,
                            type: "GET",
                            dataType: 'json',
                        }).done(function(data, textStatus, jqXHR) {

                        $.each(data, function(n, obj){



                        $("tr.items2").each(function () {
                        $('.amount',this).val( ((sale*obj.fields.rate)/100).toFixed(2));


                        })

                        })
                        })

            });

        </script>

我的代码有什么错误?我只是前端的新手。

图像:在图像中,您可以看到文本输入在两个框中都显示为 140。但是只有当我选择另一个行选择项时它才应该显示金额。金额应根据为该行传递的 ajax 值计算。

JSfiddle 没有 ajax 部分:

https://jsfiddle.net/tL86dsmc/

$("select[id*='Account']").change(function(){
			subjectId=$(this).val();

			var sale=$("#id_sale").val();

						var tax_rate = ((sale * .10)).toFixed(2);

						$(".amount").val(tax_rate);
						
						 
			
			});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input type="text" id="id_sale" value=100>
<table>
  <tr class="items2">
    <td>
      <select id="Account-1" value="1">
        <option value="" selected="selected">---------</option>
        <option value="1">tax @18%</option>
        <option value="2">Tax @ 17%</option>
      </select>
    </td>
    <td>
      <input id="amount-2" class="amount">
    </td>
  </tr>
  <tr class="items2">
    <td>
      <select id="Account-2" value="1">
        <option value="" selected="selected">---------</option>
        <option value="1">tax @18%</option>
        <option value="2">Tax @ 17%</option>
      </select>
    </td>
    <td>
      <input id="amount-2" class="amount">
    </td>
  </tr>
</table>

【问题讨论】:

  • &lt;iselect&gt;是什么元素?它应该有一个结束标签吗?为什么有多个元素具有相同的id
  • @Teemu 将其更改为
  • data 是单个对象还是数组?
  • @RIYAJKHAN 数据是一个数组,但包含单行。
  • 还没有解决方案!!!

标签: javascript jquery frontend


【解决方案1】:

由于attribute-contains-selector,您会得到相同的结果,因为每次用户添加行时,脚本都会选择 value=1 的 id,并将其值插入到输入文本字段中。您可以尝试使用类更改脚本中的 id 选择。

【讨论】:

  • 没有得到它。我为每个功能使用类。你能举一个很好的例子吗!!!感谢您的努力。
【解决方案2】:

使用类试试

<script>
$(".items2").change(function(){
subjectId=$(this).val();
console.log(subjectId);
var sale=$("#id_sale").val();
console.log(sale);

request_url = '{% url "taxrate" pk=0 %}'.replace('0', subjectId);
console.log( "request_url = " + request_url);
$.ajax({
    url: request_url,
    type: "GET",
    dataType: 'json',
}).done(function(data, textStatus, jqXHR) {

        $("tr.items2").each(function () {
            $(this).find('.amount').val(((sale*obj.fields.rate)/100).toFixed(2));
        })
    })

});
</script>

【讨论】:

  • 它不工作。控制台没有打印 subjectId,subject id 值是行值,但它应该具有 select 值。
  • 您只需在 tr 中为您的 select 分配一个类,然后在第一行使用该类 $(".selectClass").change(function(){//code goes in here}) ;
  • 或者你可以试试这个选择器: $(".items2 select").change(function(){ //你的代码放在这里 });
  • 试过这样做,它的功能与我的代码相同。如果我添加另一行,输入文本会被填充。
  • 我在你的 done 函数中编辑了 ajax 调用后的行,试过了吗?
【解决方案3】:

应该是,

 $(this).parent().next().find('input.amount')
.val(((sale * data[0].fields.rate) / 100).toFixed(2));

删除这部分

 $.each(data, function(n, obj) {
      $("tr.items2").each(function() {
        $('.amount', this).val(((sale * obj.fields.rate) / 100).toFixed(2));
      })
    })

问题

$('.amount',this). 

将访问每个输入元素,无论选择控件是否更改。

【讨论】:

  • 如果我删除你所说的行,控制台会出错。 ReferenceError: obj is not defined .
  • 请添加回复
  • ReferenceError: obj 未定义 createinvoice:864 jQuery.Callbacks/fire() jquery-1.12.3.js:3232 jQuery.Callbacks/self.fireWith() jquery-1.12.3 .js:3362 done() jquery-1.12.3.js:9852 .send/callback()
  • 原始数据:[{"model": "invoice.ledgermodel", "pk": 431, "fields": {"rate": 14.0}}]
  • Json 数据:0{model: "invoice.ledgermodel", pk: 431, fields: {rate: 14}}
猜你喜欢
  • 1970-01-01
  • 2020-07-25
  • 2015-02-16
  • 1970-01-01
  • 2014-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-09
相关资源
最近更新 更多