c# - 使用 JQuery 将文本框与动态创建的表中的单元格相乘

标签 c# javascript jquery html

我有一个动态创建的表,其 id 名为“editTable”,如下所示:

  <tbody>
        @{var i = 0;}
        @foreach (var item in Model)
        {

            <tr>
                <td width="25%">
                    @Html.DisplayFor(modelItem => item.Product.Name)
                </td>
                <td width="25%">
                    @Html.DisplayFor(modelItem => item.Quantity)
                </td>
                <td width="25%">
                    <div class="editor-field">
                        @Html.EditorFor(modelItem => item.UnitPrice)
                        @Html.ValidationMessageFor(model => item.UnitPrice)
                    </div>
                </td>
                <td width="25%" id="total"></td>   
            </td>
            </tr>

        }
    </tbody> 

第三个 td 元素由一个 C# 文本框组成,该文本框被转换为 html 中的元素。

现在我想将数量乘以单价,以在旁边的第 4 个 td 元素中显示该值。每次调整文本框中的值时,该值都应更新。我是 JQuery/JavaScript 的新手,并想出了以下代码:

// Calculating quantity*unitprice
$('#editTable tr td:nth-child(3) input').each( function (event) {
    var $quant = $('#editTable tr td:nth-child(2)', this).val();
    var $unitPrice = $('#editTable tr td:nth-child(3) input', this).val();
    $('#editTable tr td:nth-child(4)').text($quant * $unitPrice);
});

这不起作用,仅在第四个元素中显示 NaN。谁能帮我将此代码更新为工作版本?任何帮助将非常感激。

最佳答案

我猜你不小心切换了单位和价格,因为它有更多的逻辑来更改单位数量而不是价格。我拿了你的 html 和 javascript 并尝试尽可能少地更改以使其工作(我并不是说解决方案是完美的,我只是不想给你一个完全不同的示例来说明如何做到这一点)。

html(C# 与此问题无关):

<table id="editTable">
<tbody>
            <tr>
                <td width="25%">
                    Product name
                </td>
                <td width="25%">
                    5
                </td>
                <td width="25%">
                    <div class="editor-field">
                        <input id="UnitPrice" name="UnitPrice" type="number" value="2" style="width:40px" />
                    </div>
                </td>
                <td width="25%" id="total"></td>
            </tr>

    </tbody> 
</table>

javascript/jquery(应该在加载时运行):

$('#editTable tr td:nth-child(3) input').each(updateTotal);
$('#editTable tr td:nth-child(3) input').change(updateTotal);

var element;
function updateTotal(element)
{
    var quantity = $(this).closest('tr').find('td:nth-child(2)').text();
    var price = $(this).closest('tr').find('td:nth-child(3) input').val();
    $(this).closest('tr').find('td:nth-child(4)').text(quantity * price);
}

你遇到的问题是jquery。我创建了一个函数来接收一个元素(在我们的例子中是您的 UnitPrice 输入),然后它获取类型 tr 最接近的祖先。 (它所在的行)并从那里开始执行您尝试执行的操作。 您已使用 jquery 选择器获取所有表行中的所有第二个单元格,closest('tr').find将其限制为当前行。 您尝试过使用.val()在 td 元素上,您应该使用 .text().html() 。相反,您还可以添加 data-val="<%=value%>"在 td 上,然后使用 .data('val') 。 最好直接从 $(element).val() 获取单位,而不是转到 tr,然后返回到 td 和输入。

要查看它的工作情况:http://jsfiddle.net/Ynsgf/1/

我希望我的解释和给您的选项没有给您带来任何困惑。

关于c# - 使用 JQuery 将文本框与动态创建的表中的单元格相乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20076129/

相关文章:

c# - 为什么同时使用前缀和后缀是非法的?

c# - Azure Durable Functions 无法将 HttpRequestMessage 作为 OrchestrationClient.StartNewAsync 的输入传递

javascript - 如何在codeigniter中使按钮重定向到外部链接?

javascript - 将表格<td>作为复选框,如何在<td>上实现点击和拖动多选

javascript - selectboxit 的 AngularJs 问题

c# - 如何高效地修剪数据

c# - 如何检查未知的 XML 文件以获取其元素或属性?

javascript - 从 vue 指令操作目标的 dom

javascript - 是否可以使用 html5 将 MediaStream 转换为视频 blob

javascript - 第二个模式按钮不起作用