【问题标题】:jQuery: $.trim() spaces between words in input.val()jQuery:input.val() 中单词之间的 $.trim() 空格
【发布时间】:2011-12-20 04:00:50
【问题描述】:

我在这里看到了一些与我类似的问题,但他们并没有真正回答我......

所以我这样做了:(在文档准备功能内)

$("#dest").focusin(function() {
    $("#dest").val($.trim($("#dest").val()));
});

这个想法是当用户关注一个名为#destinput 时,修剪其上的所有空格字符(之前为了视觉舒适而添加了focusout)。

现在,什么都没有发生。 :(

希望有人可以在这里帮助我。

谢谢!


这是与计算机有关的问题吗? 我已经测试了评论者提供的所有代码,但没有一个有效。我在 OSX (Snow Leopard) 10.6.8 下使用 Firefox 和 Safari,也在 10.8.2 (Lion) 下使用 Safari,我得到了相同的结果...... OSX 问题? -- 一切正常,检查我上次的编辑!


感谢 Phil Klein 的最终编辑和解决方案

我的问题是错误地使用了 jQuery 的 trim() 函数...根据 trim() documentation 它执行以下操作:

$.trim() 函数删除所有换行符、空格(包括 不间断空格),以及从开头和结尾的制表符 提供的字符串。如果这些空白字符出现在中间 字符串,它们被保留。

昨天我没有读到上面写着from the beginning and end of the supplied string 的最后一部分——对不起大家。 :(

幸运的是,在上图之后,@Phil Klein 理解了我的错误并帮助我解决了问题:

$(function() {
    $("#dest").on("focus", function() {
        var dest = $(this);
        dest.val(dest.val().split(" ").join("")); 
    });
});

你可以read more about the solution and see an example here

感谢@Phil Klein 以及所有帮助我的人 ;)

【问题讨论】:

  • 也许可以使用其他方式(CSS padding?)实现视觉舒适度
  • 你的函数是完全正确的,你只需要用$(function(){...code...} 包装一下就可以了
  • @Thilo - CSS 填充每 3 个数字?
  • @Nacho 已经在 $(document).ready 函数中。谢谢。
  • 您能解释一下您看到的结果吗?目前还不清楚你的问题到底是什么。

标签: javascript jquery trim


【解决方案1】:

下面的示例从焦点所在文本框的内容中删除所有空格。这个特定示例需要 jQuery 1.7+,因为它使用新的 .on() API:

$(function() {
    $("#dest").on("focus", function() {
        var dest = $(this);
        dest.val(dest.val().split(" ").join("")); 
    });
});

请参阅此示例:http://jsfiddle.net/RnZ5Y/5/

【讨论】:

  • 您可能希望在答案中包含代码,jsfiddle 并不总是可访问的。
  • 你的例子不工作,在 Firefox 和 Safari 下测试。还是谢谢。
  • @PhilKlein 编辑帖子后,短语前后的空格会被删除,但两个单词之间的空格不会被删除...检查上图...谢谢
  • @TCB13 事情终于开始变得有意义了。你不想修剪空间,你想删除它们?请参阅上面的更新。
  • @PhilKlein 你的解决方案效果很好,谢谢 ;) LOL 我没有阅读文档的最后两行:from the beginning and end of the supplied string. If these whitespace characters occur in the middle of the string, they are preserved. LOOL 抱歉。
【解决方案2】:

试试这些:$.trim($("#dest").val());
如果我错了,请纠正我!

【讨论】:

  • .val() 对于文本字段应该没问题。
  • 你最后多了一个),但$.trim($("#dest").val());仍然无法工作...谢谢
  • @TCB13 最后的括号是 $.trim
【解决方案3】:

试试$("#dest").val().trim();,它对我有用。

【讨论】:

    【解决方案4】:

    如果您在页面尚未完全准备好之前执行上面的代码,那么很可能 jquery 找不到 #dest 并且监听事件的代码没有被执行。

    【讨论】:

    • 代码在document ready 函数中,抱歉一开始没有说。无论如何,我发疯了,试图将代码放入其中:$(window).bind("load", function() {,但仍然无法正常工作。谢谢。
    【解决方案5】:

    此功能适用于您的场景。因为它在字符之间只占用一个空格,并且不允许超过 2 个空格

    $(function() {
     $("#dest").on("focusout", function() {
        var dest = $(this);
        dest.val(jQuery.trim(dest.val()));        
        dest.val(dest.val().replace(/[ ]{2,}/, ' ')); 
     });
    });
    

    【讨论】:

    • 这个案子早就结案了。我在错过阅读文档时承认了错误。
    【解决方案6】:

    我做了我自己的功能:)

    请看这里:)

    function KillSpaces(phrase) {
    
                var totalPhrase = "";
                for (i = 0; i < phrase.length; i++)
                {
                    if (phrase[i] != " ")
                    {
                        totalPhrase += phrase[i];
                    }
                }
                return totalPhrase;
            }
    

    您可以随时轻松使用它!

    $(document).ready(function(){
    var test="for testing purposes only";
    alert(killSpaces(test));
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 2011-05-29
      • 2012-05-29
      • 2022-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多