1

How does Kentico calculate the length of inputted content in a text area on a form and how much value does it give to a line break? A line break is 2 characters according to my JavaScript calculation but seems like Kentico calculates it as being more than 2 characters.

Summary of problem:

I have a maximum length of 2500 set on a text area input on a form on my Kentico site.

I have entered some text into a this text area and with my JavaScript calculations (used to show how many characters the user has left) the character length is exactly 2500 (including line breaks and spaces) and so should therefore validate and send. However Kentico is failing my input saying that my max length has been exceeded. See below:

enter image description here

If I remove the line break and type some extra characters to bring my character calculation back up to 2500, the form sends without failing.

Test used that fails:

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, at scelerisque lacus elit quis enim. Donec at metus lectus. 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 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, at 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 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 felis. Sed porttitor, nibh et volutpat posuere, neque dui sollicitudin sapien, at scelerisque lacus elit quis enim. Donec at metus lectus. 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 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, at 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

Test used that passes: Notice that the line break has been removed and 2 extra characters added to the end to bring it back up to 2500 characters

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, at scelerisque lacus elit quis enim. Donec at metus lectus. 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 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, at 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, at scelerisque lacus elit quis enim. Donec at metus lectus. 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 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, at 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 dee

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 に答える