2009-10-06 9 views
1

J'ai un élément textarea dans une application Facebook Je veux limiter, visuellement, à un certain nombre de caractères. Ceci est un extrait de code que je suis arrivé sur le web:FBJS textarea compte à rebours

<script> 

    function textCounter(textarea, countdown, maxlimit) 
    { 
    textareaid = "ta1"; 
    if (textareaid.value.length > maxlimit) 
     textareaid.value = textareaid.value.substring(0, maxlimit); 
    else 
     document.getElementById(countdown).value = '('+(maxlimit-textareaid.value.length)+' characters available)'; 
    } 

</script> 

<form> 
    <textarea id="ta1" name="ta1" rows=5 cols=20 
     onKeyDown="textCounter('ta1','ta1count',100);" 
     onKeyUp="textCounter('ta1','ta1count',100);" 
    ></textarea> 
    <br/> 
    <input id="ta1count" readonly type="text" size="30"/> 
</form> 

<script type="text/javascript"> 
    textCounter('ta1','ta1count',100); 
</script> 

Ce script fonctionne bien en dehors d'un cadre Facebook, mais je ne comprends pas les limites de FBJS et ce que je besoin de changer pour rendre ce script travail. Quelqu'un a-t-il réussi à mettre en œuvre une fonctionnalité similaire?

Merci.

Répondre

1

L'extrait de code que vous avez affiché ne fonctionne pas.

est ici une version qui fonctionne (est testé)

<html> 
<head> 
<title>Tarea test</title> 
<script type="text/javascript"> 

function id (e) { 
    return document.getElementById(e); 
} 

window.onload = function() { 

    var oElement = id('message'); 
    var iMaxChars = 300; 

    oElement.onblur = getHandler(iMaxChars); 
    oElement.onfocus = getHandler(iMaxChars); 
    oElement.onchange = getHandler(iMaxChars); 
    oElement.onkeyup = getHandler(iMaxChars); 

    updateTextArea('message', iMaxChars); 

} 

function getHandler(iMaxChars) { 
    return function() { updateTextArea('message', iMaxChars) }; 
} 

function updateTextArea(sTextAreaID, iMessageMaxLength) { 
    var oTextAreaNode = id(sTextAreaID); 
    var oMessageCounter = id('messagecounter'); 

    var sMessageValue = oTextAreaNode.value; 
    var iMessageLength = sMessageValue.length; 

    if (iMessageLength > iMessageMaxLength) { 
     oTextAreaNode.value = sMessageValue.substr(0, iMessageMaxLength); 
     iMessageLength=iMessageMaxLength; 
    } 
    oMessageCounter.innerHTML = ""+(iMessageMaxLength - iMessageLength); 
} 

</script> 
</head> 
<body> 

<form action="#" method="post"> 
    <fieldset> 
    <label for="message" id="messagelabel">Message <span id="messagecounter">300</span></label> 
    <textarea id="message" name="message" rows="10" cols="50"></textarea> 
    </fieldset> 
</form> 
</body> 
</html> 

Dans exemple, vous vous essayez d'obtenir une valeur à partir d'une chaîne. Textareaid n'est pas un noeud dans cette portée.

+0

Hah, un insigne tumbleweed, alors une réponse correcte et fonctionnelle. Droit sur monsieur! –