【问题标题】:Cannot trim whitespace on email input无法修剪电子邮件输入中的空格
【发布时间】:2016-12-18 11:17:04
【问题描述】:

我试图修剪电子邮件输入中的尾随空格,但我认为将修剪应用于电子邮件输入时存在问题。谁能解释为什么会这样,或者我的假设是否不正确。此代码在应用时适用于密码字段,但不适用于电子邮件字段。

编辑:

它是一个 Ruby on Rails 应用程序,但创建的 HTML 是这样的:

查看:

<input class="mandatory form-control form-control" id="user_email" maxlength="250" name="user[email]" required="required" type="email">
<input class="mandatory form-control form-control" id="user_password" maxlength="20" name="user[password]" required="required" type="password">

JQuery:

$('input').blur(function()
{
    this.value=$(this).val().trim();
});

我也试过这个,但仍然没有运气。它会去除文本之间的空格,但仍不会删除尾随空格:

$('input[type=email]').on('blur', function () 
{
    $(this).val($(this).val().replace(/ /g,''));
})

【问题讨论】:

  • 请在此处粘贴一些代码。这将帮助我们在您的代码中找到问题并解决它。
  • 我在 JSFiddle 上也试过这个,但这个功能似乎也不起作用。在我的应用程序上,它肯定在处理密码,当我编辑代码时,电子邮件输入只是标准文本输入,它也可以工作。

标签: jquery


【解决方案1】:

对不起,我之前发布了错误的信息。这是一个有效的js代码。

$('#user_email').bind('input', function()
{
    this.value=$(this).val().trim();
}); 

你也可以使用模糊

$('#user_email').blur('input', function()
{
    this.value=$(this).val().trim();
});

【讨论】:

  • 请阅读问题的开头:“我正在尝试修剪电子邮件输入中的尾随空格”。修剪、尾随和空格这三个词表明我不想删除所有空格。
  • @EamonnMcElroy 抱歉。我发布了一个新的答案。让我知道它是否适合你
  • @EamonnMcElroy 这回答了您的问题吗?如果是这样,请将其标记为答案。谢谢
  • 仍然没有覆盖它。自己尝试一下。当您按空格时,它不会添加空格,但是当您再次单击并返回时,您输入的空格就会出现。正如我所说,这是一种奇怪的行为,这就是为什么基本答案似乎没有涵盖它。
【解决方案2】:

我发现的最佳方法是:

$(function()
{
  $('input[type=email]').on('keypress', function(e)
  {
    if (e.which == 32)
      return false;
  });
});

所有其他方法都会导致输入类型电子邮件的奇怪行为,从而导致仍显示空格。这种方法会阻止空格出现,因为电子邮件不应该有任何空格,所以它可以正常工作。

【讨论】:

  • 任何线索如何为移动设备键盘重现这种方法?
  • 这不适用于粘贴的值
【解决方案3】:

我对同一类型的字段和其他字段使用了 jquery 版本的“trim”,并且我能够为 Bootstrap(版本 3.xx)正确修剪它们中的所有。首先,我在所有需要修剪 leadingending 空白的字段上设置了一个类(但不是“内部”空白,例如“Van Camp”)。在这个例子中称之为“nowhite”。因此,我将“nowhite”设置为我希望在表单中发生的任何字段的类,如下所示:

enter code here
<div class="form-group">
         <input type="text" class="nowhite form-control" name="firstn" id="firstn" data-error="Must Enter First Name" required>
           <div class="help-block with-errors"></div>
</div>
<div class="form-group">
         <input type="text" class="nowhite form-control" name="lname" id="lname" data-error="Must Enter Last Name" required>
           <div class="help-block with-errors"></div>
</div>

在我的 jquery 脚本中,我有这个: 在此输入代码

$('.nowhite').focusout(function(e) {
    $(this).val(  $.trim($(this).val())) ;
});

我在许多具有必填字段并且需要除空格之外的其他内容的表单上使用它。我喜欢它,因为它很短而且看起来很直观。

【讨论】:

    【解决方案4】:

    我遇到了同样的问题。尽管空间已被修剪,来自输入 type=email 的更新值并未放回其输入控件中。但是,如果您先输入不同的值,然后再将修剪后的值放回去,它确实有效。

    <input type="text" value="VDWWD">
    <input type="email" value="mail@domain.nl">
    
    <script>
        $('input').bind('focusout', function () {
            var value = $(this).val().trim();
    
            //check for type=email and put dummy value in input
            if ($(this).prop('type') === 'email') {
                $(this).val('dummyvalue');
            }
    
            $(this).val(value);
        });
    </script>
    

    【讨论】:

      【解决方案5】:

      使用emailField.value$(emailField).val() 查询值时,该值已被修剪。来自spec

      值清理算法如下:从值中去除换行符,然后从值中去除前导和尾随 ASCII 空格。

      此外,如果设置为相同的值,它不会更新显示的值。所以我们需要改变这个值,然后再把它改回来:

      var trimmedValue = emailField.value;
      emailField.value = '';
      emailField.value = trimmedValue;
      

      或者,使用 jQuery:

      var trimmedValue = $(emailField).val();
      $(emailField).val('').val(trimmedValue);
      

      【讨论】:

      • 这是正确答案并解释了发生了什么。
      猜你喜欢
      • 2012-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-16
      • 2013-08-02
      • 2018-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多