Avatar billede goose Nybegynder
30. september 2008 - 16:26 Der er 9 kommentarer og
1 løsning

Fjern ikke tegn, men skift farve

Jeg bruger følgende script til at fjerne tegn i et textfelt såfremt der er mere end 200 karakterer, og det virker fint nok:

<script language="javascript">

function countchars_description(){
    da = document.getElementById("description");
    db = document.getElementById("count_char_description");
   
    db.value = 200 - da.value.length;
    if(da.value.length > 200) {
        da.value = da.value.substr(0,200);
    }
}

</script>

Kan det ændres således, at istedet for at fjerne karakterer udover de 200, at de så istedet for bliver f.eks. røde?

Altså, de første 200 tegn skal være sorte og resten skal være røde.

/Goose
Avatar billede w13 Novice
30. september 2008 - 16:35 #1
Drejer det sig bare om et input type="text"-felt? Du kan ikke skifte farve i et sådan. Du kan kun vælge f.eks. enten rød eller sort.
Avatar billede olebole Juniormester
30. september 2008 - 17:55 #2
<ole>

Du kan lave et rødt billede 'bg_red.png' (f.eks. 200x30px). Så kunne du med lidt kreativitet:

<style type="text/css">
.max10 {
    width: 160px;
    background-image: url('bg_red.png');
    background-repeat: no-repeat;
    background-position: 0px 100px;
    font: 12px verdana, tahoma, sans-serif;
}
</style>
<script type="text/javascript">
function checkLength(oInp) {
    var nMaxLen = 10;
    if (!checkLength.testSpan) {
        checkLength.testSpan = document.createElement("span");
        document.getElementsByTagName("body")[0].appendChild(checkLength.testSpan);
        checkLength.testSpan.appendChild(document.createTextNode("-"));
        checkLength.testSpan.className = oInp.className;
        checkLength.testSpan.style.padding = 0;
        checkLength.testSpan.style.visibility = "hidden";
    }
    if (oInp.value.length>nMaxLen) {
        checkLength.testSpan.firstChild.nodeValue = oInp.value.substr(0, nMaxLen);
        oInp.style.backgroundPosition = checkLength.testSpan.offsetWidth + "px 0px";
    }
    else oInp.style.backgroundPosition = "0px 100px";
}
</script>

<input class="max10" type="text" onkeyup="checkLength(this)">

- måske bare med en anden farve på billedet  =)

/mvh
</bole>
Avatar billede olebole Juniormester
30. september 2008 - 17:57 #3
- men det kræver mere end almindelig kreativitet at gøre det i et tekstfelt. Ikke at det ikke kan lade sig gøre, men der skal lige tænkes og testes en del  =)
Avatar billede olebole Juniormester
30. september 2008 - 18:01 #4
- jo ... det siger jeg faktisk ikke kan lade sig gøre. Så skal det i hvertfald være med et transparent textarea (kan vist ikke lade sig gøre i Opera) med et baggrundsbillede til at tage sig af 'den store klump' tekst - og så et billede i samme farve bag feltet til at tage sig af bogstaverne på den sidste linje. It's all yours!  ;D
Avatar billede olebole Juniormester
30. september 2008 - 18:02 #5
"men det kræver mere end almindelig kreativitet at gøre det i et tekstfelt" >> "men det kræver mere end almindelig kreativitet at gøre det i et textarea"
Avatar billede olebole Juniormester
30. september 2008 - 18:05 #6
PS: Husk forresten, at fontstørrelsen skal være sat på feltet via en CSS-klasse. Den bliver nemlig kopieret til test-spannet, så tegnene er lige store  =)
Avatar billede goose Nybegynder
30. september 2008 - 20:41 #7
olebole >> det lyder som om jeg er ude i noget "snavs", havde håbet på der måske var en simpel måde, så jeg tror jeg dropper det igen.

Smid et svar for din ihærdige indsats.

/Goose
Avatar billede olebole Juniormester
30. september 2008 - 20:58 #8
Hehe ... kom ligetil at lege lidt videre, så den skal du da også have:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Untitled Document</title>
<style type="text/css">
html, body {
    height: 100%;
    margin: 0;
    padding: 0;
    font: 0.85em verdana, tahoma, sans-serif;
}
.bar {
    position: relative;
}
.bar .inp {
    position: absolute;
    background: transparent;
    font: 12px verdana, tahoma, sans-serif;
}
.bar img {
    position: absolute;
    width: 0;
    height: 22px;
    left: 0;
    top: 0;
}
</style>
</head>
<body>

<script type="text/javascript">
function checkChars(oInp,e) {
    var xAllowed = /^(.*?)([^a-z0-9_-]+)(.*?)/i;
    if (!checkChars.testSpan) {
        checkChars.testSpan = document.createElement("span");
        oInp.parentNode.appendChild(checkChars.testSpan);
        checkChars.testSpan.appendChild(document.createTextNode("-"));
        checkChars.testSpan.className = oInp.className;
        checkChars.testSpan.style.padding = 0;
        checkChars.testSpan.style.visibility = "hidden";
    }
    var css = oInp.parentNode.getElementsByTagName("img")[0].style;
    if (xAllowed.test(oInp.value)) {
        checkChars.testSpan.firstChild.nodeValue = RegExp.$1;
        css.left = (checkChars.testSpan.offsetWidth+2) + "px";
        var nMax = oInp.offsetWidth-(checkChars.testSpan.offsetWidth+4);
        checkChars.testSpan.firstChild.nodeValue = RegExp.$2.replace(/ /g,"\u00a0");
        var nW = checkChars.testSpan.offsetWidth;
        css.width = (nW>nMax?nMax:nW) + "px";
        css.height = oInp.offsetHeight + "px";
        if (e.keyCode!=8) {
            alert("Du har brugt et ulovligt tegn");
            oInp.focus();
            return false;
        }
    } else {
        css.left = 0;
        css.width = 0;
    }
}
</script>

<p>Prøv at skrive nogle lovlige tegn og derefter et ulovligt.</p>
<p>Lovlige tegn er <b>a-z</b> (store og små), <b>0-9</b>,<br>
    samt <b>bindestreg</b> og <b>underscore</b></p>
<p>
<span class="bar">
    <img src="bg_red.png" alt="">
    <input class="inp" type="text" onkeyup="checkChars(this,event)">
</span>
</p>

</body>
</html>
Avatar billede goose Nybegynder
15. oktober 2008 - 14:21 #9
Fik vist aldrig lukket her og tak for din "leg" :o)

/Goose
Avatar billede olebole Juniormester
15. oktober 2008 - 14:22 #10
Selvtak - og tak for points  =)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester