ASP.NET 和 C#:在键入和粘贴时从 asp.TextBox 中删除空格

ASP.NET and C#: remove spaces from asp.TextBox when typing and pasting

有一个很好的解决方案可以完成我所追求的 ,他们使用这个 javascript 函数:

var text = document.getElementById('txtText');
text.addEventListener('input', function(e){
  var keyCode = e.keyCode ? e.keyCode : e.which;
  this.value = this.value.replace(/\s/g, '')
  if(keyCode === 32) return;
})

应用于以下元素:

<input type='text' id="txtText">

在我的例子中,我没有 <input... 元素,而是 <asp:TextBox 元素,上面的函数不起作用。我使用的是正确的元素 ID,但我仍然可以粘贴并键入空格。我错过了什么?

您似乎没有正确 select 文本框项目。

您可以使用 ClientID 获取由 ASP.NET 生成的 HTML 标记的控件 ID,如下所示:

var text = document.getElementById('<%= txtText.ClientID%>');

我会使用 Class 名称并将脚本绑定到具有该 class 的元素。那么您就不需要 ClientID 并且它适用于多个元素。

<asp:TextBox ID="TextBox1" runat="server" CssClass="NoSpaces"></asp:TextBox>
<asp:TextBox ID="TextBox2" runat="server" CssClass="NoSpaces"></asp:TextBox>

<script>
    $('.NoSpaces').bind('keyup blur', function (e) {
        var keyCode = e.keyCode ? e.keyCode : e.which;
        this.value = this.value.replace(/\s/g, '')
        if (keyCode === 32) return;
    });
</script>

如果您确实想使用 ClientID,请执行此操作

$('#<%= TextBox1.ClientID %>').bind('keyup blur', function (e) {

但是,如果输入不是 aspnet 控件(asp:TextBox 或使用 runat=server 的输入),则它将不起作用。 ClientID 的另一个问题是脚本需要在包含该控件的页面上内联。