如何更新TD文本框附近的值?

Posted

技术标签:

【中文标题】如何更新TD文本框附近的值?【英文标题】:How to update near by TD text box value? 【发布时间】:2020-11-20 23:29:36 【问题描述】:

我正在开发购物车应用程序。在那里,我需要根据用户以前存储为本地 JSON 的订单来更新我的产品屏幕。我正在从服务器返回的 JSON 构建我的产品屏幕。

现在我想自动更新从服务器返回的每个产品的数量,并与之前订单的本地 JSON 进行比较。

例如产品屏幕有项目“SNICKERS”,之前的订单也有相同数量的项目,我需要在表格中“SNICKERS”行 TD 的文本框中填写这些数量值。请参考我附上的图片。

同样,如果之前的订单商品和下订单屏幕商品匹配,我需要更新所有数量值。我正在匹配产品代码,我已经完成了,但我不知道如何更新文本框中的数量值。

本地 JSON:

Object order_id: "9ec3bd80-91fc-0138-c8e0-0cc47ac946e0", product_code: "1000", quantity: 1, …

来自服务器的 JSON

Object macs_menu_id: "1047-2000000365", header_text: null, total_price: "1.68", …
4:Object macs_menu_id: "1047-2000000365", header_text: null, total_price: "1.04", …
header_text:null
header_text:null
indigent_kit:0
macs_menu_id:"1047-2000000365"
menu_prod_cat:"CNDY"
product_code:"1000"
product_desc:"SNICKERS - K"
quan_limit:0
sort_order:910
total_price:"1.68"

我比较两个 json 产品代码的代码如下

for (const x in prev_orders) 
              for (const y in response.payload.filter(d => d.product_code != null && d.macs_menu_id === this.InmateMacMenu).sort((a, b) => a.sort_order - b.sort_order)) 
                if (prev_orders[x].product_code === response.payload[y].product_code) 
                  if ($('.mat-elevation-z8 td:contains("' + prev_orders[x].product_code + '")')) 
                    // if product code matched
                    console.log('product code matched ' + response.payload[y].product_code);                
                    $('.mat-elevation-z8 td:contains("' + prev_orders[x].product_code + '")').closest('td').find('input').val(prev_orders[x].quantity);
                  
                 else 
                  console.log('not matched');
                
              
            

我在控制台中收到产品代码匹配消息。现在我需要更新文本框中的数量。谁能帮我做到这一点?谢谢

下订单屏幕

控制台消息

还有我的 html 代码

    <table id="products" mat-table [dataSource]="dataSource" class="mat-elevation-z8">
              <ng-container matColumnDef="menu_prod_cat">
                  <th mat-header-cell *matHeaderCellDef style="width: 35px;"> Category </th>
                  <td mat-cell *matCellDef="let data; let i = index" [attr.rowspan]="getRowSpan('menu_prod_cat', i)" [style.display]="getRowSpan('menu_prod_cat', i) ? '' : 'none'"> data.menu_prod_cat </td>
              </ng-container>
              <ng-container matColumnDef="product_code">
                  <th mat-header-cell *matHeaderCellDef> Code </th>
                  <td mat-cell *matCellDef="let data" (click)="get_image_binary(data)" [ngClass]="'highlight': selectedRowIndex == data.product_code"> data.product_code </td>
              </ng-container>
              <ng-container matColumnDef="product_desc">
                  <th mat-header-cell *matHeaderCellDef> Description </th>
                  <td mat-cell *matCellDef="let data" [ngClass]="'highlight': selectedRowIndex == data.product_code" (click)="get_image_binary(data)"> data.product_desc  </td>
              </ng-container>
              <ng-container matColumnDef="total_price">
                  <th mat-header-cell *matHeaderCellDef>Price </th>
                  <td mat-cell *matCellDef="let data" (click)="get_image_binary(data)" [ngClass]="'highlight': selectedRowIndex == data.product_code">
                      data.total_price | currency </td>
              </ng-container>
              <ng-container matColumnDef="quan_limit">
                  <th mat-header-cell *matHeaderCellDef style="width: 20px;">Quantity Limit </th>
                  <td mat-cell *matCellDef="let data" (click)="get_image_binary(data)" [ngClass]="'highlight': selectedRowIndex == data.product_code">
                      data.quan_limit  </td>
              </ng-container>
              <ng-container matColumnDef="Quantity">
                  <th mat-header-cell *matHeaderCellDef style="width: 35px;"> Quantity </th>
                  <td mat-cell *matCellDef="let data; let i = index" (click)="get_image_binary(data)" [ngClass]="'highlight': selectedRowIndex == data.product_code">
                    <!-- <ng-numeric-input [layout]="'tel'" [class]="'form-control'"  maxlength=data.quan_limit  [id]="'txtqtyi'" [placeholder]="'0'"  [(ngModel)]="data.quantity" (keyup)="quantityModelChange($event,data)" [entertext]="'Next'"></ng-numeric-input> -->
                     <input type="number" id=txtqtyi pattern="[0-9]*" inputmode="numeric" min="1" max=data.quan_limit [(ngModel)]="data.quantity" (keyup)="quantityModelChange($event,data)" class="Col-tdinput">
                      <!-- <input type="number" min="1" max=data.quan_limit (ngModel)="data.quantity" class="Col-tdinput" (keyup)="quantityKeypress($event,data)" pattern="[0-9]*">
                      (ngModelChange)="quantityModelChange($event,data)"
                      -->
                  </td>
              </ng-container>
              <ng-container matColumnDef="Total">
                  <th mat-header-cell *matHeaderCellDef> Total </th>
                  <td mat-cell *matCellDef="let data" (click)="get_image_binary(data)" [ngClass]="'highlight': selectedRowIndex == data.product_code">
                      <p *ngIf="data.quantity > 0">data.total_price * data.quantity | currency</p>
                  </td>
              </ng-container>
              <ng-container matColumnDef="Action">
                  <th mat-header-cell *matHeaderCellDef></th>
                  <td mat-cell *matCellDef="let data" (click)="get_image_binary(data)">
                      <button class="Col-Cartbtn" (click)="IncermentProduct(data)">+</button>
                      <button class="Col-Cartbtn" [disabled]="data.quantity==0" (click)="DecrementProduct(data)">-</button>
                  </td>
              </ng-container>
              <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
              <tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
          </table>

【问题讨论】:

能分享一下html代码吗? 一定要检查我的问题,我会在那里添加html代码 你想要这个在 Angular 还是 jQuery 中? 您确定要使用 jQuery 吗?好像你的项目是基于 AngularJS angular 或 jQuery 什么都可以,如果你们提供我的解决方案 【参考方案1】:

嗨,我自己找到了答案。它很简单,我只是将本地 json 数量值分配给服务器 json 数量。

因为我使用 data.quantity 属性绑定了我的文本框,所以当我比较产品代码时,我会分配值。检查我的附加代码。谢谢你们的cmets

for (const x in prev_orders) 
          // tslint:disable-next-line:max-line-length
          for (const y in response.payload.filter(d => d.product_code != null && d.macs_menu_id === this.InmateMacMenu).sort((a, b) => a.sort_order - b.sort_order)) 
            if (prev_orders[x].product_code === response.payload[y].product_code) 
              // tslint:disable-next-line:only-arrow-functions
              $('tr').each(function() 
                if ($('td:contains("' + prev_orders[x].product_code + '")')) 
                  // if product code matched
                  response.payload[y].quantity = prev_orders[x].quantity;
                  self.addProductToCart(response.payload[y], response.payload[y].quantity);
                
              );
             else 
              console.log('not matched');
            
          
        

【讨论】:

以上是关于如何更新TD文本框附近的值?的主要内容,如果未能解决你的问题,请参考以下文章

文本框的可见性取决于组合框的值

think php 后台如何获取 文本框里面的值?

使用组合框更改值单位时如何更新/转换数字文本框值?基于当前单位的值标准化?

如何使用 JQuery 仅更改表的 td 内的文本

文本框的 Javascript 值转换为其他 html 标记 (td) onclick

输入 access 2007 表单时如何更新另一个文本框?