2009-08-18 5 views
1

У меня есть следующий код, который отлично работает в IE для элемента textarea.Javascript не работает над FF

(изд: обернуты для удобства чтения)

<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 он даже не будет фокусироваться на коробке.

+0

как примечание стороны: вызов последней функции «createObject» немного вводит в заблуждение, поскольку вы ничего не создаете, а скорее «получаете» его. – scunliffe

+1

Не знаете, что вы подразумеваете под «не будет фокусироваться на коробке», вы не вызываете фокус() где бы то ни было, насколько я могу судить. Вы имеете в виду, если вы нажмете на него? Вставить в нее? –

+0

Работает для меня ... подозревает, что ошибка находится где-то в другом месте – Greg

ответ

10

Несколько указатели:

  • Не используйте язык = "JavaScript", это не рекомендуется.
  • Не используйте eval для доступа к собственности, это медленно и не нужно.
  • Не нюхайте за «Netscape», а не проверяйте свойство/метод существования/соответствия (innerText/textContent)
  • Не называйте метод приема элемента как «createObject», он вводит в заблуждение.
  • Не выполнять незадекларированное присвоение (maxL = 100), это склонно к ошибкам.
  • Не используйте имена переменных, которые не являются конструкторами (или пространствами имен) для соглашения.
  • Старайтесь не объявлять функции в глобальном масштабе, чтобы избежать конфликтов имен.
+0

Все хорошие моменты, и почти любой из них может объяснять то, что не работает. –

+2

На самом деле «T.J. Crowder» проблема была решена путем реализации первого указателя «Kangax» и просто изменения опции скрипта - type = «text/javascript». Работает должным образом. Если вы не помогаете, пожалуйста, не тратьте вкладчиков, учитесь вместо этого. Спасибо «Кангар»! – Codex73

0

Атрибуты для обработчиков событий предназначены для всех нижних регистров; вы пробовали onkeyup, а не onKeyUp и т. д.?

+0

Кто-то, кажется, отредактировал вопрос, чтобы сделать атрибуты все в нижнем регистре. –

+0

Эти атрибуты не будут анализироваться браузером по-разному. Это теги HTML и не чувствительны к регистру. onKeyPress и onKeyUp являются атрибутами html, а не javascript. – Codex73

+0

Это зависит от того, какую 'DOCTYPE' вы используете. Однако вы совершенно правильно относитесь к доктринам HTML. –

Смежные вопросы