1

Kentico 如何计算表单文本区域中输入内容的长度以及它对换行符的价值是多少?根据我的 JavaScript 计算,换行符是 2 个字符,但似乎 Kentico 将其计算为超过 2 个字符。

问题总结:

我在我的 Kentico 网站上的表单上输入的文本区域设置了最大长度 2500。

我已经在这个文本区域中输入了一些文本,并且通过我的 JavaScript 计算(用于显示用户留下了多少字符),字符长度正好是 2500(包括换行符和空格),因此应该验证并发送。但是,Kentico 没有输入我的输入,说我的最大长度已超出。见下文:

在此处输入图像描述

如果我删除换行符并输入一些额外的字符以使我的字符计算恢复到 2500,则表单发送而不会失败。

使用失败的测试:

Lorem ipsum dolor sit amet, consectetur adipiscing elit。Quisque vitae 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 felis。Sed porttitor,nibh et volutpat posuere,neque dui sollicitudin sapien,在 scelerisque lacus elit quis enim。在 metus lectus 的 Donec。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。在 metus lectus 的 Donec。Lorem ipsum dolor sit amet, consectetur adipiscing elit。Quisque vitae 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 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 a id metus。悬吊法 consectetur adipiscing 精英。Quisque vitae augue ac enim molestie scelerisque a id metus。悬吊法 consectetur adipiscing 精英。Quisque vitae augue ac enim molestie scelerisque a id metus。悬吊法

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 felis。Sed porttitor,nibh et volutpat posuere,neque dui sollicitudin sapien,在 scelerisque lacus elit quis enim。在 metus lectus 的 Donec。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。在 metus lectus 的 Donec。Lorem ipsum dolor sit amet, consectetur adipiscing elit。Quisque vitae 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 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 a id metus。Suspendisse purus justo, iaculis quis accumsan ut, congue vitae maur d

使用通过的测试:请注意,换行符已被删除,并在末尾添加了 2 个额外字符以使其恢复到 2500 个字符

Lorem ipsum dolor sit amet, consectetur adipiscing elit。Quisque vitae 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 felis。Sed porttitor,nibh et volutpat posuere,neque dui sollicitudin sapien,在 scelerisque lacus elit quis enim。在 metus lectus 的 Donec。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。在 metus lectus 的 Donec。Lorem ipsum dolor sit amet, consectetur adipiscing elit。Quisque vitae 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 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 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 felis。Sed porttitor,nibh et volutpat posuere,neque dui sollicitudin sapien,在 scelerisque lacus elit quis enim。在 metus lectus 的 Donec。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。在 metus lectus 的 Donec。Lorem ipsum dolor sit amet, consectetur adipiscing elit。Quisque vitae 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 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 a id metus。Suspendisse purus justo,

4

2 回答 2

0

这基本上是与浏览器相关的 JavaScript 问题。在 Firefox 或 Chrome 或任何其他基于 WebKit 的浏览器中,textareaVariableName.val().length 将只计算 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;
}

这应该可以帮助您独立于客户使用的浏览器正确计算字符数。

于 2012-06-18T20:52:00.823 回答
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               
}
于 2012-06-08T14:04:11.060 回答