【问题标题】:Jquery not removing commas and dollar symbols from numberJquery没有从数字中删除逗号和美元符号
【发布时间】:2016-09-25 06:13:50
【问题描述】:

在我的 ASP.NET MVC Core 项目中,在以下 View 中,我使用 jquery 尝试在提交表单之前从 SaleAmount 输入标记中删除 $ 符号和逗号。但它什么也没做。当我将 alert('Test') 放入 myJSFunction() 中时,成功弹出警告,这意味着该函数已被调用,但它是删除逗号的代码,并且 $ 不起作用。

型号

public class SaleViewModel
{
    [DisplayFormat(DataFormatString = "{0:C0}", ApplyFormatInEditMode = true)]
    public float? SaleAmount { get; set; }
    ....
}

控制器

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> UpdateSales(List<SaleViewModel> model, string returnUrl = null)
{
    ....
}

查看

@model IList<MyProj.Models.SaleViewModel>
....
<form id="target" asp-controller="DbRelated" asp-action="UpdateSales" asp-route-returnurl="@ViewData[" ReturnUrl"]" method="post" onsubmit="myJsFunction()">
    <table class="table">
        <thead>
            ....
        </thead>
        <tbody>
            @for (int i = 0; i < Model.Count(); i++)
            {
                <tr>
                    <td>@Html.EditorFor(r => r[i].SaleAmount, new { htmlAttributes = new { @class = "saleAmt" } })</td>
                    ....
                </tr>
            }
        </tbody>
    </table>
    <button type="submit" class="btn btn-default">Save</button>
</form>

@section scripts
{
    <script>
        $(function () {
            $("#target").submit(function (event) {
                event.preventDefault();
                myJsFunction();
            });
        });
        function myJsFunction() {
            parseFloat($('.saleAmt').val().replace(/,/g, '').replace(/$/g, ''));
            return false;
        }
    </script>
}

【问题讨论】:

  • 您替换值,但永远不要将其重新分配给文本框的更新值。但是您无论如何都取消了提交,因此该表单无论如何都不会发回任何内容。
  • 试试:parseFloat($('.saleAmt').val($('.saleAmt').val().replace(/,/g, '').replace(/$/g, '')));

标签: javascript jquery visual-studio-2015 asp.net-core asp.net-core-mvc


【解决方案1】:

您的代码不会使用修改后的文本更新文本框的值。无论如何,您取消提交,因此不会发布任何内容。你可以使用

$("#target").submit(function () {
    var textboxes = $('.saleAmt');
    $.each(textboxes, function(index, item) {
        var text = $(this).val().replace(/[$,]/g, ''); // remove characters
        $(this).val(text); // update value
    });
});

旁注,不需要使用parseFloat()

【讨论】:

  • 还是不行。我注意到,当我用$("#target").submit(function () { var textboxes = $('.grantAmt').val(); alert(textboxes); }); 替换您的代码并输入,例如,$15,481 并单击保存按钮时,弹出警报并显示 $15,481,这意味着可能$.each(...) 部分不起作用。
  • 糟糕——应该是$.each(textboxes, function(index, item) { :)
  • 但这就是您在原始代码中所拥有的。你的意思是别的要改变吗?我在您的代码中注意到的另一件事是,只有 SaleAmount 在 Db 中变为空,但如果我更改 @Html.EditorFor(r =&gt; r[i].StateName) 中的其他输入以及 SaleAmount 框,则 stateName 更改会正确反映在 Db 中。所以,除了 SaleAmount 仍然为空之外,POST 仍然有效。
  • 我在你之前的评论之后编辑了答案:)(它是$.each(saleAmt, ...
  • 而且您不可能使用问题中的代码提交表单(您已经使用event.preventDefault();return false; 取消了两次)所以还有一些事情您没有告诉我们。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-05
  • 2012-03-09
相关资源
最近更新 更多