Javascript在文本区域中每个单词的第一个字母大写的错误



我是一个小博客作者,对Javascript的了解不够。我有两个问题,当在文本区打字时,每个单词的第一个字母都要大写。在Stack Overflow上,我发现了下面给出的js代码。它工作得很好,但有一个错误。

问题1:当用户键入单行时,它会将所有单词大写,但不会在每次换行后将第一个单词大写,或者说当用户按下Enter键转到下一行时,它保持第一个字母小而不是大写。

问题2:如果用户在单词前加逗号或句号,那么它也不会将单词大写。

我想要什么在任何情况下,所有单词都应该大写,如果用户在逗号、句号、连字符、感叹号和其他基本特殊字符后没有空格,则会自动在单词前提供空格。

实际示例

以下是我的代码:

$(window).load(function() {
$.fn.capitalize = function() {
$.each(this, function() {
var split = this.value.split(' ');
for (var i = 0, len = split.length; i < len; i++) {
split[i] = split[i].charAt(0).toUpperCase() + split[i].slice(1).toLowerCase();
}
this.value = split.join(' ');
});
return this;
};
$('input#author').on('keyup', function() {
$(this).capitalize();
}).capitalize();
$('textarea#comment').on('keyup', function() {
$(this).capitalize();
}).capitalize();
});
$(window).load(function() {
$('input#email').keyup(function() {
$(this).val($(this).val().toLowerCase());
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<textarea minlength="120" id="comment" name="comment" cols="45" rows="8" aria-required="true" placeholder="Shayari"></textarea>

您可以尝试按照以下更新代码

$(window).load(function() {
$.fn.capitalize = function() {
$.each(this, function() {
var lines = this.value.split('n');
for (var i = 0; i < lines.length; i++) {
var split = lines[i].split(' ');
for (var j = 0, len = split.length; j < len; j++) {
split[j] = split[j].charAt(0).toUpperCase() + split[j].slice(1).toLowerCase();
}
lines[i] = split.join(' ');
}
this.value = lines.join('n');
});
return this;
};
$('input#author').on('keyup', function(e) {
var $control = $(e.currentTarget);
// Give space after comma, full stop, hyphen, exclamation mark 
var newValue = $control.val().replace(/([,.-!])(w)/g, '$1 $2');
$control.val(newValue);
$(this).capitalize();
}).capitalize();
$('textarea#comment').on('keyup', function(e) {
var $control = $(e.currentTarget);
// Give space after comma, full stop, hyphen, exclamation mark 
var newValue = $control.val().replace(/([,.-!])(w)/g, '$1 $2');
$control.val(newValue);
$(this).capitalize();
}).capitalize();
$('input#email').on('keyup', function() {
$(this).val($(this).val().toLowerCase());
});      
});

我在https://jsfiddle.net/r4w43L2k/5/,你可以查一下。

相关内容

最新更新