Kentico如何计算表单上文本区域中输入内容的长度以及它给换行符的值多少?根据我的JavaScript计算,换行符是2个字符但是似乎Kentico计算它超过2个字符。
问题摘要:
我在Kentico网站上的表单上输入的文本区域设置的最大长度为2500.
我已经在这个文本区域输入了一些文本并使用我的JavaScript计算(用于显示用户剩下的字符数),字符长度恰好是2500(包括换行符和空格),因此应该验证并发送。然而,Kentico在我的输入中没有说我的最大长度已被超过。见下文:
如果我删除换行符并输入一些额外的字符以使我的字符计算重新达到2500,那么表单就会发送而不会失败。
使用失败的测试:
Lorem ipsum dolor坐下来,精神上的精神。 Quisque简历 augue ac enim molestie scelerisque a id metus。 Suspendisse purus justo,iaculis quis accumsan ut,congue vitae mauris。 Nunc luctus vulputate scelerisque。 Nullam ullamcorper porta elit,sed ornare lorem placerat dictum。 Sed quis enim quis nibh convallis sagittis nec vitae 猫。 Sed porttitor,nibh et volutpat posuere,neque dui sollicitudin sapien,在scelerisque lacus elit quis enim。 Donec在metus lectus。 Sed quis enim quis nibh convallis sagittis nec vitae felis。桑达 porttitor,nibh et volutpat posuere,neque dui sollicitudin sapien,at scelerisque lacus elit quis enim。 Donec在metus lectus。 Lorem ipsum dolor sit amet,consectetur adipiscing elit。 Quisque vitae augue ac enim molestie scelerisque是一个id metus。 Suspendisse purus justo,iaculis quis accumsan ut,congue vitae mauris。 Nunc luctus vulputate scelerisque。 Nullam ullamcorper porta elit,sed ornare lorem placerat 格言。 Sed quis enim quis nibh convallis sagittis nec vitae felis。 Sed porttitor,nibh et volutpat posuere,neque dui sollicitudin sapien,在scelerisque lacus elit quis enim。 Donec at metus lectus.Lorem ipsum dolor sit amet,consectetur adipiscing elit。 Quisque vitae augue ac enim molestie scelerisque是一个id metus。 Suspendisse purus jus
to,iaculis quis accumsan ut,congue vitae mauris。 Nunc luctus vulputate scelerisque。 Nullam ullamcorper porta elit,sed ornare lorem placerat dictum。 Sed quis enim quis nibh convallis sagittis nec vitae 猫。 Sed porttitor,nibh et volutpat posuere,neque dui sollicitudin sapien,在scelerisque lacus elit quis enim。 Donec在metus lectus。 Sed quis enim quis nibh convallis sagittis nec vitae felis。桑达 porttitor,nibh et volutpat posuere,neque dui sollicitudin sapien,at scelerisque lacus elit quis enim。 Donec在metus lectus。 Lorem ipsum dolor sit amet,consectetur adipiscing elit。 Quisque vitae augue ac enim molestie scelerisque是一个id metus。 Suspendisse purus justo,iaculis quis accumsan ut,congue vitae mauris。 Nunc luctus vulputate scelerisque。 Nullam ullamcorper porta elit,sed ornare lorem placerat 格言。 Sed quis enim quis nibh convallis sagittis nec vitae felis。 Sed porttitor,nibh et volutpat posuere,neque dui sollicitudin sapien,在scelerisque lacus elit quis enim。 Donec at metus lectus.Lorem ipsum dolor sit amet,consectetur adipiscing elit。 Quisque vitae augue ac enim molestie scelerisque是一个id metus。 Suspendisse purus justo,iaculis quis accumsan ut,congue vitae maur d
使用的测试通过:请注意,换行符已被移除,并且在末尾添加了2个额外字符,最多可将其恢复为2500个字符
Lorem ipsum dolor坐下来,精神上的精神。 Quisque简历 augue ac enim molestie scelerisque a id metus。 Suspendisse purus justo,iaculis quis accumsan ut,congue vitae mauris。 Nunc luctus vulputate scelerisque。 Nullam ullamcorper porta elit,sed ornare lorem placerat dictum。 Sed quis enim quis nibh convallis sagittis nec vitae 猫。 Sed porttitor,nibh et volutpat posuere,neque dui sollicitudin sapien,在scelerisque lacus elit quis enim。 Donec在metus lectus。 Sed quis enim quis nibh convallis sagittis nec vitae felis。桑达 porttitor,nibh et volutpat posuere,neque dui sollicitudin sapien,at scelerisque lacus elit quis enim。 Donec在metus lectus。 Lorem ipsum dolor sit amet,consectetur adipiscing elit。 Quisque vitae augue ac enim molestie scelerisque是一个id metus。 Suspendisse purus justo,iaculis quis accumsan ut,congue vitae mauris。 Nunc luctus vulputate scelerisque。 Nullam ullamcorper porta elit,sed ornare lorem placerat 格言。 Sed quis enim quis nibh convallis sagittis nec vitae felis。 Sed porttitor,nibh et volutpat posuere,neque dui sollicitudin sapien,在scelerisque lacus elit quis enim。 Donec at metus lectus.Lorem ipsum dolor sit amet,consectetur adipiscing elit。 Quisque vitae augue ac enim molestie scelerisque是一个id metus。 Suspendisse purus justo,iaculis quis accumsan ut,congue vitae mauris。 Nunc luctus vulputate scelerisque。 Nullam ullamcorper porta elit,sed ornare lorem placerat dictum。 Sed quis enim quis nibh convallis sagittis nec vitae felis。 Sed porttitor,nibh et volutpat posuere,neque dui sollicitudin sapien,at scelerisque lacus elit quis enim。 Donec在metus lectus。 Sed quis enim quis nibh convallis sagittis nec vitae felis。 Sed porttitor,nibh et volutpat posuere, neque dui sollicitudin sapien,来自scelerisque lacus elit quis enim。 Donec在metus lectus。 Lorem ipsum dolor坐在amet,consectetur adipiscing elit。 Quisque vitae augue ac enim molestie scelerisque id metus。 Suspendisse purus justo,iaculis quis accumsan ut,congue vitae mauris。 Nunc luctus vulputate scelerisque。 Nullam ullamcorper porta elit,sed ornare lorem placerat dictum。 Sed quis enim quis nibh convallis sagittis nec vitae felis。 Sed porttitor,nibh et volutpat posuere,neque dui sollicitudin sapien,at scelerisque lacus elit quis enim。 Donec at metus lectus.Lorem ipsum dolor坐在amet,consectetur adipiscing elit。 Quisque vitae augue ac enim molestie scelerisque id metus。 Suspendisse purus justo,iaculis quis accumsan ut,congue vitae maur dee
答案 0 :(得分:0)
问题在于,我在JavaScript中的计算给出换行符的长度为1,因此Kentico的计算给出换行符的长度为2。所以他们没有匹配。因此,我的角色计数器表示输入文本的长度是可以的,但Kentico的检查认为它超过了最大长度。
这就是我之前的观点:
enteredText = textareaVariableName.val();
characterCount = enteredText.length; //one line break entered returned 1
这是我将其更改为:
enteredText = textareaVariableName.val();
enteredTextEncoded = escape(enteredText);
//next I match any line break characters - %0A - after encoding the text area text
linebreaks = enteredTextEncoded.match(/%0A/g);
(linebreaks != null) ? linebreaksLength = linebreaks.length : linebreaksLength = 0;
characterCount = enteredText.length + linebreaksLength; //one line break entered now returns 2
有没有更好的方法可以检查文本中的换行符,而不是编码文本然后检查子串%0A?
编辑/更新:我认为以下是一个更好的解决方案,而不是我上面所做的。
var limit = 2500; //for example
enteredText = textareaVariableName.val();
numberOfLineBreaks = (enteredText.match(/\n/g)||[]).length;
left = limit - enteredText.length - numberOfLineBreaks;
if (left < 0) {
//character count over code here
} else {
//character count within limits code here
}
答案 1 :(得分:0)
这基本上是与浏览器相关的JavaScript问题。在Firefox或Chrome或任何其他基于WebKit的浏览器textareaVariableName.val()。长度将只计算1个字符的新行(\ n)。对于jQuery实现也是如此。但在IE document.getElementById('textareaVariableName')中.value.length将为新行计算2(\ r \ n)
在Kentico中,文本被验证为实际的字符数,因此验证失败。
快速解决此问题的简单正则表达式用于计算实际长度:
function getTextLength(elementId){
if (elementId) {
var elem = document.getElementById(elementId);
if (elem) {
var str = elem.value;
if (str) {
str = str.replace(/(\r\n|\r|\n)/g, '\r\n');
return str.length;
}
}
}
return 0;
}
这可以帮助您独立于客户使用的浏览器正确计算字符数。