【问题标题】:Javascript Code wont run when changing TextBox Format更改文本框格式时,Javascript 代码不会运行
【发布时间】:2016-01-15 20:53:13
【问题描述】:

嗨,我正在使用下面的 java 脚本代码在 asp grid-view 中进行一些计算

如果我在网格视图中更改文本框格式,代码将不会运行

例如

<ItemTemplate>
<asp:TextBox ID="txtCalcCommision" TextMode="Number" placeholder="Eenter Commision" runat="server" CssClass="form-control"  ></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>

除了代码运行完美

javascript 代码

<script type="text/javascript">

    $(document).ready(function () {

        $("[id*=GvProducts]input[type=text][id*=txtCalc]").on('keyup', (function (e) {

            var Costprice = $(this).closest('tr').find("input[type=text][id*=txtCalcCostPrice]").val();
            var quantity = $(e.target).closest('tr').find("input[type=text][id*=txtCalcQuantity]").val();
            var Commision = $(this).closest('tr').find("input[type=text][id*=txtCalcCommision]").val();
            var getunitprice = (parseFloat(Commision / 100 * Costprice)) + parseFloat(Costprice);
            var total = getunitprice * quantity;
            $(e.target).closest('tr').find("[id*=lblunitprice]").text(getunitprice);
            $(e.target).closest('tr').find("[id*=lblTotal]").text(total);
            GrossTotal();
        }));

    });

    var gross;

    function GrossTotal() {

        gross = 0;

        $("[id*=GvProducts][id*=lblTotal]").each(function (index, item) {
            gross = gross + parseInt($(item).text());
        });
        $("[id*=lblGrandTotal]").text(gross);
    }
</script>

【问题讨论】:

  • 哪部分不起作用? 'keyup'?
  • @tnw: 他的标记是 asp.net html
  • 是的,keyup 不起作用

标签: javascript c# jquery asp.net gridview


【解决方案1】:

ClientIDMode="Static" 添加到文本框中。 ASP.NET 将在呈现页面时更改 ID,除非您将 ClientIDMode 设置为“Static”。

您是否尝试过在 keyup 函数中添加 debugger; 行?它可能已经上线,但函数中的代码运行不正常。

[id*=GvProducts] 这不包含在您提供的 HTML 中。我真的不知道这是否会影响 CSS 选择器找到您的文本框控件。

&lt;ItemTemplate&gt; 假设这是来自中继器...在这种情况下,您最好使用$("input.form-control") 来找到您的控件。当 ID 在中继器中时,ASP.NET 会做很多事情来唯一化 ID。

【讨论】:

  • 你提到的关于 ClientIDMode="Static" 是真的。但是,他正在使用 jquery contains selector 这意味着 id like '%txtCalc%'
  • 是的,我注意到了,但它在中继器内。我认为整个 ID 将丢失并转换为其他内容。我将检查我的应用程序中中继器内的 ID 发生了什么。您对 GVProducts 位的看法绝对正确,因为我们在发布的 HTML 中看不到这一点。
  • 嗨,我尝试添加 ClientIDMode="Static" 仍然有问题
  • @Ayman 您是否能够通过添加调试器行来测试是否实际调用了 keyup 函数?
【解决方案2】:

选项 1:

改变:

 $("[id*=GvProducts]input[type=text][id*=txtCalc]").on('keyup', (function (e) {

 $("[id$=txtCalcCommision]").on('keyup', (function (e) {

由于 id 是唯一的,一个简单的以选择器结尾就可以完成这项工作。

选项 2:

由于您没有使用@Nick 提到的ClientIDMode="Static",因此您需要获取服务器生成的ID 作为选择器ID。

$("&lt;%=txtCalcCommision.ClientID%&gt;").on('keyup', (function (e) {

选项 3:

ClientIDMode="Static"添加到asp.net控件:

&lt;asp:TextBox ID="txtCalcCommision"ClientIDMode="静态"TextMode="Number" placeholder="Eenter Commision" runat="server" CssClass="form-control" &gt;&lt;/asp:TextBox&gt;

$("#txtCalcCommision").on('keyup', (function (e) {

【讨论】:

  • 您好,尝试了选项 1 和 2 都不起作用我在 java 脚本代码输入中注意到 [type=text] 也许如果将类型更改为数字将起作用
  • 它们是独一无二的,问题是当我删除 TextMode="Number" 代码有效
猜你喜欢
  • 2020-09-14
  • 1970-01-01
  • 2013-01-16
  • 1970-01-01
  • 2015-03-01
  • 2021-05-16
  • 2015-05-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多