Question

I have a textarea that receives inputs in ALL CAPS, which is fine for most users. Some users need the text represented in a normalized fasion - with the first letter of each sentence capitalized and the rest lowercase.

I tried to adapt some suggestions from other SO threads, but somethings is missing. Help please!

Body

<form>
        <input value="Select all" onclick="javascript:this.form.finaltext.focus();this.form.finaltext.select();"  type="button">
        <input value="Clear All" onclick="this.form.finaltext.value=''" type="button">
        <input value="Normalize text" type="button"  id="normalize">
        <a href="#" id="copy-textarea"><input type=button value="Copy to Clipboard"></a><br>
        <br>
        <textarea id="finaltext" cols="80" rows="50"> </textarea>
        </form>

Script

$(window).load(function(){
$('#normalize').click(function capitalizeSentences(){

var capText = $("#finaltext").val();
capText = capText.toLowerCase();

capText = capText.replace(/\.\n/g,".[-<br>-]. ");
capText = capText.replace(/\.\s\n/g,". [-<br>-]. ");
var wordSplit = '. ';

var wordArray = capText.split(wordSplit);

var numWords = wordArray.length;

for(x=0;x<numWords;x++) {

    wordArray[x] = wordArray[x].replace(wordArray[x].charAt(0),wordArray[x].charAt(0).toUpperCase());

        if(x==0) {
            capText = wordArray[x]+". ";
        }else if(x != numWords -1){
            capText = capText+wordArray[x]+". ";
        }else if(x == numWords -1){
            capText = capText+wordArray[x];
        }               
}
capText = capText.replace(/\[-<br>-\]\.\s/g,"\n");
capText = capText.replace(/\si\s/g," I ");  
$("#finaltext").val(capText);
});
});

UPDATE 1 Now the script works.

NEW QUESTION How can I manipulate the logic in the .replace brackets for the following situation:

The text area I want to allow "normalization" is in the following format:

  • TEXT1
  • TEXT2
  • TEXT3

with a dash, space and ALL CAPS text. The .replace logic seems to only look for the first character in the string, but I would like it to treat each line (starting with the dash) separately and only leave the first letter thereafter capitalized.

Était-ce utile?

La solution

I'm taking the suggestion below and posting the corrected code that solved my click problem - credit to Ross:

I needed to wrap my script in a window.load function to include the function in the DOM after rendering.

$(window).load(function(){
...script...

}));
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top