使用jQuery,当用户仍在编辑文本字段时,如何将其大写呢?


71

我正在寻找一个示例,该示例如何大写输入文本字段的字符串的首字母。通常情况下,这是对整个领域完成了一个功能,正则表达式,OnBlurOnChange等我想首字母大写,而用户仍然打字。

例如,如果我输入单词“ cat”,则用户应按“ c”,然后在按“ a”时,C应当在该字段中大写。

我想我想要的是可能的 keyupkeypress,但我不知道从哪里开始。

有人给我一个例子吗?

Answers:


101

只需使用CSS。

.myclass 
{
    text-transform:capitalize;
}

34
这将大写每个单词。
Kaleb Brasee 2010年

6
@Kaleb“大写”值将每个单词的第一个字符大写。w3schools.com/Css/pr_text_text-transform.asp
Darrell Brogdon 2010年

4
是的,这就是我的意思,OP只想将整个字段的首字母大写。
Kaleb Brasee 2010年

4
在Google Chrome浏览器中-仍然允许输入全部大写。需要JS才能将其转换为Sentence Case。
亚伦

25
大写字母只会更改外观,后端将在输入时接收输入。这可能会导致意外出现带有小写字母的相同文本。
Spajus 2011年

79

这将简单地转换您的文本首字母:

yourtext.substr(0,1).toUpperCase()+yourtext.substr(1);


4
简单而甜美。就我的情况帮助了我:)
Lahiru '16

5
这应该是可接受的答案,因为如果您将其用作后端的输入,这实际上会修改用户输入。
Ogier Schelvis,2016年

接受的答案需要创建<tag>并添加.class; 这是没有必要的!
Alex

这应该是公认的答案;当前接受的答案仅是一种解决方法。
阴险的胡子,

28

我在其他地方回答了这个问题。但是,您可能要在keyup事件上调用以下两个函数。

大写第一个字

  function ucfirst(str,force){
          str=force ? str.toLowerCase() : str;
          return str.replace(/(\b)([a-zA-Z])/,
                   function(firstLetter){
                      return   firstLetter.toUpperCase();
                   });
     }

并大写所有单词

function ucwords(str,force){
  str=force ? str.toLowerCase() : str;  
  return str.replace(/(\b)([a-zA-Z])/g,
           function(firstLetter){
              return   firstLetter.toUpperCase();
           });
}

正如@Darrell建议的

$('input[type="text"]').keyup(function(evt){

      // force: true to lower case all letter except first
      var cp_value= ucfirst($(this).val(),true) ;

      // to capitalize all words  
      //var cp_value= ucwords($(this).val(),true) ;


      $(this).val(cp_value );

   });

希望这会有所帮助

干杯:)


2
这将大写下一个来自外国字符(例如波兰łęą等)的字母。“małopolska” =“MałOpolska”
挖空

您不应在ASCII字符上使用正则表达式,而应始终以大写首字母开头。
justin.m.chase 2016年

最好使用最佳实践,.blur()因为否则用户无法使用Ctrl+A来选择全部。
David Passmore

26
$('input[type="text"]').keyup(function(evt){
    var txt = $(this).val();


    // Regex taken from php.js (http://phpjs.org/functions/ucwords:569)
    $(this).val(txt.replace(/^(.)|\s(.)/g, function($1){ return $1.toUpperCase( ); }));
});

仅供参考,此脚本将停止您的用户在文本框中使用光标键。
本·克拉克·罗宾逊

25

具有“ text-transform:大写”的CSS解决方案 如果您想在后端使用输入内容,那就不好了。您仍将原样接收数据。JavaScript解决了这个问题。

jQuery插件结合了前面提到的一些技术,另外它在连字符后大写单词,即:“ Tro Lo-Lo”:

添加到您的脚本:

jQuery.fn.capitalize = function() {
    $(this[0]).keyup(function(event) {
        var box = event.target;
        var txt = $(this).val();
        var stringStart = box.selectionStart;
        var stringEnd = box.selectionEnd;
        $(this).val(txt.replace(/^(.)|(\s|\-)(.)/g, function($word) {
            return $word.toUpperCase();
        }));
        box.setSelectionRange(stringStart , stringEnd);
    });

   return this;
}

然后只需将capitalize()附加到任何选择器:

$('#myform input').capitalize();

4
我认为这应该是该问题的答案,因为CSS解决方案仅是一种表示。
Can Celik

17

我使用了@Spajus的代码,并编写了更扩展的jQuery插件。

我编写了以下四个jQuery函数:

  • upperFirstAll() 大写输入字段中的所有单词
  • upperFirst() 仅将第一个单词大写
  • upperCase() 将孔文字转换为大写
  • lowerCase() 将孔文字转换为小写

您可以像使用其他任何jQuery函数一样使用和链接它们:
$('#firstname').upperFirstAll()

我完整的jQuery插件:

(function ($) {
    $.fn.extend({

    // With every keystroke capitalize first letter of ALL words in the text
    upperFirstAll: function() {
        $(this).keyup(function(event) {
            var box = event.target;
            var txt = $(this).val();
            var start = box.selectionStart;
            var end = box.selectionEnd;

            $(this).val(txt.toLowerCase().replace(/^(.)|(\s|\-)(.)/g,
            function(c) {
                return c.toUpperCase();
            }));
            box.setSelectionRange(start, end);
        });
        return this;
    },

    // With every keystroke capitalize first letter of the FIRST word in the text
    upperFirst: function() {
        $(this).keyup(function(event) {
            var box = event.target;
            var txt = $(this).val();
            var start = box.selectionStart;
            var end = box.selectionEnd;

            $(this).val(txt.toLowerCase().replace(/^(.)/g,
            function(c) {
                return c.toUpperCase();
            }));
            box.setSelectionRange(start, end);
        });
        return this;
    },

    // Converts with every keystroke the hole text to lowercase
    lowerCase: function() {
        $(this).keyup(function(event) {
            var box = event.target;
            var txt = $(this).val();
            var start = box.selectionStart;
            var end = box.selectionEnd;

            $(this).val(txt.toLowerCase());
            box.setSelectionRange(start, end);
        });
        return this;
    },

    // Converts with every keystroke the hole text to uppercase
    upperCase: function() {
        $(this).keyup(function(event) {
            var box = event.target;
            var txt = $(this).val();
            var start = box.selectionStart;
            var end = box.selectionEnd;

            $(this).val(txt.toUpperCase());
            box.setSelectionRange(start, end);
        });
        return this;
    }

    });
}(jQuery));

Groetjes :)


10

使用jQuery时,我个人最喜欢的简短而有趣:

function capitalize(word) {
   return $.camelCase("-" + word);
}

有一个jQuery插件也可以做到这一点。我称它为... jCap.js

$.fn.extend($, { 
    capitalize: function() {
        return $.camelCase("-"+arguments[0]); 
    } 
});

这对我来说看起来不错..比其他答案好得多..因为它使我能够根据著名的jQuery库提供的现有功能进行思考。感谢您的推动。
纳瓦兹

为什么您会选择我的方法而不是简单地使用CSS?只是好奇。用例是什么?
托德

2
与CSS相比,我更喜欢这种方法,因为它实际上将字符串大写(即在数据级别完成),而不是仅渲染大写的文本(即在表示级别完成)。在数据级别,我们不仅可以执行大写操作,还可以在数据级别本身(通常)执行此操作(以及所有此类工作)。
纳瓦兹

但这不能处理多个单词。请参阅下面的我的版本,它是对@Todd的修改,但支持字符串中的单词数。
siwalikm

10
 $("#test").keyup(
     function () {
         this.value = this.value.substr(0, 1).toUpperCase() + this.value.substr(1).toLowerCase();
     }
 );

最优雅的风格,也是在需要大写字符串值时非常有用的风格,因此CSS不适用
Dalibor

7

对上面的代码稍作更新,以强制在首字母大写之前将字符串降低。

(均使用Jquery语法)

    function CapitaliseFirstLetter(elemId) {
        var txt = $("#" + elemId).val().toLowerCase();
        $("#" + elemId).val(txt.replace(/^(.)|\s(.)/g, function($1) {
        return $1.toUpperCase(); }));
        }

另外一个将WHOLE字符串大写的函数:

    function CapitaliseAllText(elemId) {
         var txt = $("#" + elemId).val();
         $("#" + elemId).val(txt.toUpperCase());
         }

在文本框的click事件上使用的语法:

    onClick="CapitaliseFirstLetter('myTextboxId'); return false"

4

我的应用程序。语法由于我匆忙草率而关闭。干得好...

     $('#tester').live("keyup", function (evt)
        {
            var txt = $(this).val();
            txt = txt.substring(0, 1).toUpperCase() + txt.substring(1);
            $(this).val(txt);
        });

简单但可行。您可能想使它更通用,更即插即用。这只是用更少的代码提供了另一个想法。我的编码理念是使其尽可能通用,并使用尽可能少的代码。

希望这可以帮助。祝您编码愉快!:)



4

非常酷,您只能大写输入字段的第一个字母。如果有人知道如何大写,例如CSS text-transform:capitalize,请回复..在这里,您可以..

$('input-field').keyup(function(event) { $(this).val(($(this).val().substr(0,1).toUpperCase())+($(this).val().substr(1))); });


2

土耳其的。如果仍然有兴趣。

 $('input[type="text"]').keyup(function() {
    $(this).val($(this).val().replace(/^([a-zA-Z\s\ö\ç\ş\ı\i\ğ\ü\Ö\Ç\Ş\İ\Ğ\Ü])|\s+([a-zA-Z\s\ö\ç\ş\ı\i\ğ\ü\Ö\Ç\Ş\İ\Ğ\Ü])/g, function ($1) {
        if ($1 == "i")
            return "İ";
        else if ($1 == " i")
            return " İ";
        return $1.toUpperCase();
    }));
});

2

这将帮助您-将每个单词的首字母转换为大写

<script>
  /* convert First Letter UpperCase */
  $('#txtField').on('keyup', function (e) {
    var txt = $(this).val();
    $(this).val(txt.replace(/^(.)|\s(.)/g, function ($1) {
      return $1.toUpperCase( );
    }));
  });
</script>

示例:这是一个标题案例句子->这是一个标题案例句子


1

使用Javascript,您可以使用:

yourtext.substr(0,1).toUpperCase()+yourtext.substr(1);

如果您偶然用PHP生成网页,也可以使用:

<?=ucfirst($your_text)?>

1

实现此目标时,我同时使用CSS和jQuery解决方案。这将改变它在浏览器中的显示方式以及数据值。一个简单的解决方案就可以了。

的CSS

#field {
    text-transform: capitalize;
}

jQuery的

$('#field').keyup(function() {
    var caps = jQuery('#field').val(); 
    caps = caps.charAt(0).toUpperCase() + caps.slice(1);
    jQuery('#field').val(caps);
});

1

接受异常(通过参数传递)的解决方案:

复制下面的代码并像这样使用它:$('myselector')。maskOwnName(['of','on','a','as','at','for','in','to ']);

(function($) {
    $.fn.maskOwnName = function(not_capitalize) {
            not_capitalize = !(not_capitalize instanceof Array)? []: not_capitalize;

        $(this).keypress(function(e){
            if(e.altKey || e.ctrlKey)
                return;

            var new_char = String.fromCharCode(e.which).toLowerCase();

            if(/[a-zà-ú\.\, ]/.test(new_char) || e.keyCode == 8){
                var start = this.selectionStart,
                    end = this.selectionEnd;

                if(e.keyCode == 8){
                    if(start == end)
                        start--;

                    new_char = '';
                }

                var new_value = [this.value.slice(0, start), new_char, this.value.slice(end)].join('');
                var maxlength = this.getAttribute('maxlength');
                var words = new_value.split(' ');
                start += new_char.length;
                end = start;

                if(maxlength === null || new_value.length <= maxlength)
                    e.preventDefault();
                else
                    return;

                for (var i = 0; i < words.length; i++){
                    words[i] = words[i].toLowerCase();

                    if(not_capitalize.indexOf(words[i]) == -1)
                        words[i] = words[i].substring(0,1).toUpperCase() + words[i].substring(1,words[i].length).toLowerCase();
                }

                this.value = words.join(' ');
                this.setSelectionRange(start, end);
            }
        });
    }

    $.fn.maskLowerName = function(pos) {
        $(this).css('text-transform', 'lowercase').bind('blur change', function(){
            this.value = this.value.toLowerCase();
        });
    }

    $.fn.maskUpperName = function(pos) {
        $(this).css('text-transform', 'uppercase').bind('blur change', function(){
            this.value = this.value.toUpperCase();
        });
    }
})(jQuery);

0
    .first-character{
        font-weight:bold;
        color:#F00;
        text-transform:capitalize;
   }
.capital-text{
    text-transform:uppercase;
    }

0

jQuery或Javascipt没有提供实现此目的的内置方法。

CSS测试转换(text-transform:capitalize;)并未真正大写字符串的数据,而是在屏幕上显示了大写的呈现。

如果您正在寻找使用普通vanillaJS在数据级别实现此目标的更合法方法,请使用此解决方案=>

var capitalizeString = function (word) {    
    word = word.toLowerCase();
    if (word.indexOf(" ") != -1) { // passed param contains 1 + words
        word = word.replace(/\s/g, "--");
        var result = $.camelCase("-" + word);
        return result.replace(/-/g, " ");
    } else {
    return $.camelCase("-" + word);
    }
}

0

我的尝试。

仅当所有文本均为小写字母或全部为大写字母时,才使用区域设置大小写转换。尝试尊重人为的大小写差异或名称中的'或'。发生在Blur上,不会在电话上引起烦恼。尽管保留在选择开始/结束位置,所以如果更改为键盘可能仍然有用。应该可以在电话上使用,但没有尝试过。

$.fn.capitalize = function() {
    $(this).blur(function(event) {
        var box = event.target;
        var txt = $(this).val();
        var lc = txt.toLocaleLowerCase();
        var startingWithLowerCaseLetterRegex = new RegExp("\b([a-z])", "g");
        if (!/([-'"])/.test(txt) && txt === lc || txt === txt.toLocaleUpperCase()) {
            var stringStart = box.selectionStart;
            var stringEnd = box.selectionEnd;
            $(this).val(lc.replace(startingWithLowerCaseLetterRegex, function(c) { return c.toLocaleUpperCase() }).trim());
            box.setSelectionRange(stringStart, stringEnd);
        }
    });
   return this;
}

// Usage:
$('input[type=text].capitalize').capitalize();

0

如果使用Bootstrap,请添加:

class="text-capitalize"

例如:

<input type="text" class="form-control text-capitalize" placeholder="Full Name" value="">

-3

轻微更新到cumul的解决方案。

如果单词之间的空格超过一个,则函数upperFirstAll将无法正常工作。替换此正则表达式以解决该问题:

$(this).val(txt.toLowerCase().replace(/^(.)|(\s|\-)+(.)/g,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.