0

我有一点 javascript 可以计算一个盒子上的字数。javascript看起来像这样:

<script type="text/javascript">
    function cnt(w,x){
        var y=w.value;
        var r = 0;
        a=y.replace(/\s/g,' ');
        a=a.split(' ');

        for (z=0; z<a.length; z++) {if (a[z].length > 0) r++;}
        x.value=r;
        if (r > 60) {
            x.value='Please reduce the word count'; 
        }
    } 
</script>

和这样的形式:

<label>Free brochure from entry:</label>
<textarea name="freebrochureentryform" id="freebrochureentryform" onKeyUp="cnt(this,document.brochure.c)"><?php echo $row['freebrochureentryform']; ?></textarea>

<label>Brocure Entry Word Count:</label>
<input type="text" name="c" value="0" size="20" onKeyUp="cnt(document.brochure.freebrochureentryform,this)" />

基本上,底部输入字段显示上部的单词数量。但它只有在您单击上框“freebrochureentryform”时才会这样做,但我希望它在页面加载后立即加载单词量,而不是在您单击框时加载。我想这与

onKeyUp="cnt(document.brochure.freebrochureentryform,this)" 

但是不知道要改成什么。

(顺便说一句,小册子是我表格的名称。)

非常感谢任何帮助。

伊恩

4

4 回答 4

1

您可以在事件上调用该cnt()函数。window.onload

而不是听onkeyup事件,你可以听更合适oninput(或onpropertychangeIE)的事件:

JSFiddle

<label>Free brochure from entry:</label>
<textarea name="freebrochureentryform" id="freebrochureentryform">Lorem Text</textarea>
<br />
<label>Brocure Entry Word Count:</label>
<input type="text" name="c" id="c" value="0" size="20" />
window.onload=function(){
    function cnt(area,output){
        var txt=area.value.replace(/^\s+|\s+$/g,"").replace(/\s+/g," ").split(" ");
        if(txt.length>10){
            output.value="Please delete some word";
        }else{
            output.value=txt.length;
        }
    }
    var textarea=document.getElementById("freebrochureentryform");
    var info=document.getElementById("c");
    if("addEventListener" in window){
        if("oninput" in textarea){
            textarea.addEventListener("input",function(){
                cnt(textarea,info);
            },false);
        }else if("onpropertychange" in textarea){
            textarea.addEventListener("propertychange",function(e){
                if((e||event).propertyName=="value"){
                    cnt(textarea,info);
                }
            },false);
        }else{
            textarea.addEventListener("change",function(){
                cnt(textarea,info);
            },false);
        }
    }else{
        textarea.attachEvent("onpropertychange",function(){
            if(event.propertyName=="value"){
                cnt(textarea,info);
            }
        });
    }
    cnt(textarea,info);
};

一些指示:

  • var txt=area.value
    • .replace(/^\s+|\s+$/g,"")意味着trim
    • .replace(/\s+/g," ")将一系列空格(包括换行符)合并为一个(更好地split无需迭代拆分的数组);
    • .split(" ")由空格分隔(正如您已经完成的那样)。
  • oninput在 IE9 中引入,但有一些错误行为,因此您可能需要先尝试onproperychange
  • putfunction cnt()textarea/ infoinwindow.onload使它们在闭包内“安全” 。它们不会污染全局命名空间,全局命名空间中的东西也不会污染它们。
于 2013-07-16T11:42:19.863 回答
0

onKeyUp仅在用户交互时触发。

如果加载侧面没有事件KeyUp

所以与其。手动触发它。

手动调用cnt(document.brochure.freebrochureentryform,document.brochure.c)你的身体(或onload

于 2013-07-16T10:57:24.847 回答
0

试着呼唤cnt(w,x)身体onload event

于 2013-07-16T10:58:49.837 回答
0
function countWords(str) {
  let arr = str.split(' ');
  let count = 0;
  if(arr.length > 0){
    for (let i = 0; i< arr.length - 1; i++){
        let sentence = arr[0];
        let bool = true;
        for(let j = 0; j < sentence.length - 1; j++){
            let charcode = arr[i].charCodeAt(j);
            if((charcode > 64 && charcode < 91) || (charcode > 96 && charcode < 123)){
            bool = false;
            }
        }
        if(bool == true){
        count += 1;
        }
    }
  }
  return arr.length - count;
}

//function calling
countWords("he is a good programer, he won 865 competitions, but sometimes he dont. 
what do you think? all test-cases should pass. done-done?");
于 2021-03-19T11:42:29.593 回答