Javascript无法在FF上工作

时间:2009-08-18 21:21:03

标签: javascript ajax firefox javascript-events

我有以下代码,它在IE中适用于textarea元素。

(编辑:为了可读性而包装)

<textarea name="mem_message" cols="25" rows="5"
  onkeypress="return taLimit(this)" 
  onkeyup="return taCount(this,'myCounter')">
    <? echo $_SESSION['mem_message']; ?>
</textarea>

它调用验证函数:

<script language="Javascript"><!--Counter for Message Box -->

maxL=100;
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>

以上所有内容仅适用于IE。在Firefox上,它甚至不会专注于这个盒子。

4 个答案:

答案 0 :(得分:10)

几个指针:

  • 不要使用language =“javascript”,不推荐使用。
  • 不要使用eval进行财产访问,这很慢且没必要。
  • 不要嗅探“Netscape”,而是检查属性/方法是否存在/合规性(innerText / textContent)
  • 不要将接收元素的方法命名为“createObject”,这会产生误导。
  • 不要执行未声明的作业(maxL = 100),这很容易出错。
  • 对于惯例,不要将非构造函数(或名称空间)的变量名称大写。
  • 尽量不要在全局范围内声明函数,以避免名称冲突。

答案 1 :(得分:1)

这是一个更好的脚本来计算textarea中的字符:http://sliceofcake.wordpress.com/2007/08/16/count-characters-in-a-textarea/

希望这就是你要找的东西!

答案 2 :(得分:0)

事件处理程序的属性应全部小写;你试过onkeyup而不是onKeyUp等吗?

答案 3 :(得分:0)

在使用JavaScript进行任何开发之前,请先在此处阅读Unobtrusive JavaScript http://en.wikipedia.org/wiki/Unobtrusive_JavaScript

你以后会多次感谢我!