2012-03-31 21 views
1

Das ist schwer für mich als JS Neuling auf die Spur zu kommen.JavaScript funktioniert nicht in FF und IE

Ich schreibe ein einfaches (?) Skript, das mir unter einer Textarea (die zum Schreiben von SMS-Nachrichten gedacht ist) zeigt, wie viele Zeichen die aktuelle SMS hat und wie viele SMS ich bisher geschrieben habe.

Ich habe folgendes JavaScript in meinem Header:

<script type='text/javascript'> 
    function CheckCount(text, length) { 
     var MaxLength = new Number(length); 
     messages = Math.ceil(((text.value) ? text.value.length : 0)/160); 
     remaining = messages * 160 - (((text.value) ? text.value.length : 0) % (messages * 160) || messages * 160); 
     if (text.value.length == 0) { messages = 1; remaining = 160; } 
     document.getElementById('messages').innerText = messages + ' SMS'; 
     document.getElementById('remaining').innerText = remaining + ' Characters remaining'; 
    } 
</script> 

Im Körper der Website ich dies gesagt:

<textarea name="sms_text" cols="35" rows="5" onKeyUp="javascript:CheckCount(this,4000);" onChange="javascript:CheckCount(this,4000);"></textarea> 
<p style="margin-left:174px"> 
    <span id="remaining">160 Characters remaining</span> | 
    <span style="clear:both" id="messages">1 SMS</span> 
</p> 

Dies funktioniert in Opera, Safari und Chrome. Firefox und IE haben ihre Probleme.

Bitte schlagt mich nicht zu viel. Ich beginne gerade mit JavaScript und nach einem Tag langwieriger Suche kann ich nicht zur Lösung kommen. :)

Antwort

3

Sie brauchen nicht javascript: in Ihrem Textarea-Handler enthalten Attribute:

Während die oben wahr ist, Ihr Problem durch die Verwendung von innerText verursacht wird. Der Wechsel zu innerHTML funktioniert in FireFox.

http://jsfiddle.net/ZTRFA/1/

Und es in IE8 funktioniert es notwendig ist, messages und remaining zu erklären. Ich habe auch die redundante Leitung var MaxLength = new Number(length); entfernt.

http://jsfiddle.net/ZTRFA/2/

function CheckCount(text, length) { 
     var messages = Math.ceil(((text.value) ? text.value.length : 0)/160); 
     var remaining = messages * 160 - (((text.value) ? text.value.length : 0) % (messages * 160) || messages * 160); 
     if (text.value.length == 0) { messages = 1; remaining = 160; } 
     document.getElementById('messages').innerHTML = messages + ' SMS'; 
     document.getElementById('remaining').innerHTML = remaining + ' Characters remaining'; 
} 
+0

dies wahr ist, ein mit [label] (https://developer.mozilla.org/en/JavaScript/Reference/Statements/label) ohne eine Schleife ist völlig sinnlos ..., aber es wird nichts brechen. – Quentin

+0

@Quentin - ganz richtig, ja. Ich dachte, ich sollte nach dem Posten überprüfen. – shanethehat

+0

In der Tat behebt dies das FF-Problem (warum kann FF InnerText nicht behandeln?). Jetzt ist nur noch IE übrig. Dahin kommen. :) Ich werde das JavaScript-Etikett entfernen. Guter Tipp. Vielen Dank. – BigBonsai

Verwandte Themen