firefox中的javascript字符计数器

firefox中的javascript字符计数器,javascript,Javascript,首先,让我说我对javascript一无所知。最近几天我一直在网上搜索,想找到一个字符计数器添加到文本区域。我终于找到了一个漂亮的小脚本(),除了一个问题外,它的效果非常好。当您达到Firefox允许的最大字符数时,整个键盘将被禁用。不能回退以缩短计数或在中间单击并删除。在IE、Chrome和Safari中运行良好,但在FireFox中不起作用。我的请求是,有人能帮我修改javascript,以便在达到最大字符数时在FireFox中启用退格和删除按钮 谢谢你的帮助 JavaScript代码 &l

首先,让我说我对javascript一无所知。最近几天我一直在网上搜索,想找到一个字符计数器添加到文本区域。我终于找到了一个漂亮的小脚本(),除了一个问题外,它的效果非常好。当您达到Firefox允许的最大字符数时,整个键盘将被禁用。不能回退以缩短计数或在中间单击并删除。在IE、Chrome和Safari中运行良好,但在FireFox中不起作用。我的请求是,有人能帮我修改javascript,以便在达到最大字符数时在FireFox中启用退格和删除按钮

谢谢你的帮助

JavaScript代码

<script language = "Javascript">

maxL=255;
var bName = navigator.appName;
function taLimit(taObj) {
    if (taObj.value.length==maxL) return false;
    return true;
}

function taCount(taObj,Cnt) { 
    objCnt=createObject(Cnt);
    objVal=taObj.value;
    if (objVal.length>maxL) objVal=objVal.substring(0,maxL);
    if (objCnt) {
        if(bName == "Netscape"){    
            objCnt.textContent=maxL-objVal.length;}
        else{objCnt.innerText=maxL-objVal.length;}
    }
    return true;
}

function createObject(objId) {
    if (document.getElementById) return document.getElementById(objId);
    else if (document.layers) return eval("document." + objId);
    else if (document.all) return eval("document.all." + objId);
    else return eval("document." + objId);
}
</script>

maxL=255;
var bName=navigator.appName;
函数taLimit(taObj){
if(taObj.value.length==maxL)返回false;
返回true;
}
函数taCount(taObj,Cnt){
objCnt=createObject(Cnt);
objVal=taObj.value;
如果(objVal.length>maxL)objVal=objVal.substring(0,maxL);
if(objCnt){
如果(bName==“Netscape”){
objCnt.textContent=maxL objVal.length;}
else{objCnt.innerText=maxL objVal.length;}
}
返回true;
}
函数createObject(objId){
if(document.getElementById)返回document.getElementById(objId);
否则,如果(文件层)返回eval(“文件”+objId);
否则,如果(document.all)返回eval(“document.all.”+objId);
否则返回eval(“文件”+objId);
}
HTML代码

<font> Maximum Number of characters for this text box is 255.<br>
<textarea onKeyPress="return taLimit(this)" onKeyUp="return taCount(this,'myCounter')" name="Description" rows=7 wrap="physical" cols=40>
</textarea>
<br><br>
You have <B><SPAN id=myCounter>255</SPAN></B> characters remaining for your description...</font>
此文本框的最大字符数为255。


您的描述还有255个字符。。。
您支持哪些浏览器?为什么不能使用maxlength属性而不是javascript?然后您只需要一个函数,该函数将显示
var charsLeft=$(this).attr(“maxlength”)-$(this.val().length并将其放入您的
myCounter
span?它是HTML5的新功能,但在大多数新浏览器(不是Opera)中仍然受支持

您可以尝试以下方法:

HTML:


强> demo <强>:

虽然这个脚本/HTML看起来很旧,但你应该真正找到一些更现代的东西,最简单的方法是通过修改TalimIt()函数来考虑是否被按下的键是可打印的:

function isCharacterKey(event) {
    var charCode = event.charCode;    
    return charCode !== 0;
}

function taLimit(taObj, event) {        
    if (taObj.value.length<maxL || !isCharacterKey(event)) return true;
    return false;    
}
函数isCharacterKey(事件){
var charCode=event.charCode;
返回字符码!==0;
}
函数taLimit(taObj,事件){

if(taObj.value.lengthI)我建议在达到限制后保存内容,如果下一次输入增加了大小(使文本无效)然后将其替换为保存的版本。问题很好,但我建议您选择另一个脚本。您在这里获得的内容值得作为21世纪初的一件事记住。使用
而不是弃用的
(当然,这并不能解决您的问题。)可能的副本,我相信Netscape和IE1调用<代码>文档.GetelMtMyBID每次用户写一个字符,它是昂贵的。你应该考虑将它缓存在变量中。试着也得到同样的结果。由于某种原因,计数器在Firefox中不起作用。这是在一个被嵌入的Axx控件中运行的。在DotNetNuke中作为一个模块进行了测试。我不知道这是否与此有关。您使用的是什么版本的FireFox?我刚刚在FireFox中测试了fiddle演示,它工作得很好…(我在版本21和22中进行了测试)DotNetNuke是否缩小了js?我不确定,但这可能是一个问题,因为javascript函数将被命名为其他名称,很可能是我使用的单个字符22。这是一种可能性。让我在DNN之外测试脚本,看看会发生什么。我对此感到厌倦,并且由于某种原因,计数器在FireFox中不起作用。这是一个非常复杂的过程n.ascx控件作为一个模块嵌入到DotNetNuke中。我不知道这是否与此有关。我在FireFox中能够使用的唯一示例是我上面发布的一个,它只起了一半的作用。@user2577468对我来说它在FireFox 25上起作用,我不知道DotNetNuke和.ascx是什么。你能用e控制台并发布错误?我在FireFox 22上。它没有给出错误,代码正在正确执行,它只是在达到最大值时锁定整个键盘。@user2577468对我来说它在FF22上工作。可能那些DotNetNuke和.ascx正在添加产生锁的代码。我的代码是安全的,因为它不会停止写入事件,它是安全的仅将所有文本替换为前255个字符(如果文本区域未完全填充,则不超过255个字符),因此不会取消退格功能。让我在DNN之外测试脚本,看看会发生什么。我会与您联系。这已解决问题。感谢您的帮助,下次我将尝试查找一些更现代的示例。
function countCharsLeft(element){
  var curCharCount = element.value.length;
  var maxLength = element.getAttribute("maxlength");
  document.getElementById("myCounter").innerHTML = maxLength-curCharCount;
}
<p>Maximum Number of characters for this text box is 255.</p>
<textarea data-counter="myCounter" id="Description" rows="7" wrap="physical" cols="40" maxlength="255">
</textarea>
<p>You have <b><span id="myCounter">255</span></b> characters remaining for your description...</p>
var txtArea = document.getElementById('Description');
txtArea.counter = document.getElementById(txtArea.getAttribute('data-counter'));
txtArea.onkeyup = txtArea.onchange = txtArea.oninput = taLimit;

function taLimit() {
    var maxL = this.getAttribute('maxlength');
    if (this.value.length>=maxL){
        this.value = this.value.substring(0, maxL);
    }
    this.counter.innerHTML = maxL-this.value.length;
}
function isCharacterKey(event) {
    var charCode = event.charCode;    
    return charCode !== 0;
}

function taLimit(taObj, event) {        
    if (taObj.value.length<maxL || !isCharacterKey(event)) return true;
    return false;    
}
<textarea onKeyPress="return taLimit(this, event)" onKeyUp="javascript:return taCount(this,'myCounter')" name="Description" rows=7 wrap="physical" cols="40">
</textarea>