Avatar billede gigi1 Nybegynder
30. oktober 2012 - 21:00 Der er 8 kommentarer

input - kun tal

Hvordan laver jeg en inputboks hvor man kun kan skrive tal i.
Og hvor der automatik laves en bindestreg efter 6 cifre og derefter kan der skrives 4 cifre.

Formatet skal være dette, og man skal kun kunne indtaste tal:
012345-6789
Avatar billede olebole Juniormester
30. oktober 2012 - 22:46 #1
<ole>

Prøv det her:

<style type="text/css">
.zip-a {
    text-align: right;
    color: #ccc;
}
.zip-b {
    color: #ccc;
}
</style>
<script type="text/javascript">
function hndlFocus(elm, bBlur) {
    if (bBlur && elm.value=="") {
        elm.value = elm.defaultValue;
        elm.style.color = "#ccc";
    } else {
        if (elm.value==elm.defaultValue) elm.value = "";
        elm.style.color = "#000";
    }
}
function kUp(elm) {
    elm.value = elm.value.replace(/\D/g, "");
    if (elm.value.length===6) document.getElementById("zip_b").focus();
}
function kUp2(elm) {
    elm.value = elm.value.replace(/\D/g, "").substr(0,4);
}
</script>

<p>
    <input class="zip-a" name="zip_a" type="text" size="4" value="ddmmyy"
        onkeyup="kUp(this)" onfocus="hndlFocus(this)" onblur="hndlFocus(this, true)"> - <input
        class="zip-b" id="zip_b" name="zip_b" type="text" size="2" value="1234"
        onkeyup="kUp2(this)" onfocus="hndlFocus(this)" onblur="hndlFocus(this, true)">
</p>

/mvh
</bole>
Avatar billede olebole Juniormester
30. oktober 2012 - 23:24 #2
- og denne er nok lidt mere elegant  =)

<style type="text/css">
.zip-a {
    text-align: right;
    color: #ccc;
}
.zip-b {
    color: #ccc;
}
</style>
<script type="text/javascript">
function hndlFocus(elm, bBlur) {
    if (bBlur && elm.value=="") {
        elm.value = elm.defaultValue;
        elm.style.color = "#ccc";
    } else {
        if (elm.value==elm.defaultValue) elm.value = "";
        elm.style.color = "#000";
    }
}
function changeFocus() {
    document.getElementById("zip_b").focus();
}

function kDown(elm, e) {
    var kC = e.keyCode,
    sId = elm.getAttribute("id"),
    nLen = sId==="zip_b" ? 4 : 6;
    if ( ((kC>47&&kC<58) || (kC>95&&kC<106)) && elm.value.length<nLen) {
        if (nLen===6 && elm.value.length===5) setTimeout(changeFocus, 10)
        return true;
    }
    if ( ((kC>7&&kC<10) || (kC>36&&kC<41) || kC===9) ) {
        return true;
    }
    e.cancelBubble = true;
    e.returnValue = false;
    if (e.stopPropagation) e.stopPropagation();
    if (e.preventDefault) e.preventDefault();
   
}
</script>

<p>
    <input class="zip-a" name="zip_a" type="text" size="4" value="ddmmyy" onkeydown="kDown(this, event)"
        onfocus="hndlFocus(this)" onblur="hndlFocus(this, true)"> - <input
        class="zip-b" id="zip_b" name="zip_b" type="text" size="2" value="1234" onkeydown="kDown(this, event)"
        onfocus="hndlFocus(this)" onblur="hndlFocus(this, true)">
</p>
Avatar billede gigi1 Nybegynder
31. oktober 2012 - 16:34 #3
Havde tænkt på kun et input felt hvor stregen kommer efter 6 cifre.
Avatar billede olebole Juniormester
31. oktober 2012 - 16:48 #4
Ja, det fremgår af spørgsmålet - men det har ikke skræmt mig fra at give dig en bedre løsning  =)

Det, du efterlyser i spørgsmålet, er jeg helt sikker på, du ikke ønsker. Hvis man kun kunne indtaste tal, ville det være umuligt for brugeren at rette, hvis hun skrev noget forkert. Hun ville f.eks. ikke kunne bruge piltaster, backspace, delete, eller tab - ligesom der også skal tages hensyn til, at hun muligvis vælger at bruge sin NumPad.

Der er som sagt ikke så lidt at tage højde for, og det bliver endnu værre, hvis det skal foregå i ét felt
Avatar billede gigi1 Nybegynder
31. oktober 2012 - 16:57 #5
Det har du ret i :)

Denne her er jo faktisk ret god: http://digitalbush.com/projects/masked-input-plugin/#usage

Men hvis jeg bare kunne fjerne de grimme streger som kommer før man skriver.
Avatar billede gigi1 Nybegynder
31. oktober 2012 - 19:23 #6
Så virker det :)


$(document).ready(function() {
    $("#txtboxToFilter").keydown(function(event) {
        // Allow: backspace, delete, tab, escape, and enter
        if ( event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 27 || event.keyCode == 13 ||
            // Allow: Ctrl+A
            (event.keyCode == 65 && event.ctrlKey === true) ||
            // Allow: home, end, left, right
            (event.keyCode >= 35 && event.keyCode <= 39)) {
                return;
        }
        else {
            // Ensure that it is a number and stop the keypress
            if (event.shiftKey || (event.keyCode < 48 || event.keyCode > 57) && (event.keyCode < 96 || event.keyCode > 105 )) { 
                event.preventDefault();
            } 
        }

        if(  $("#txtboxToFilter").val().length == 6 )
      {
            event.target.value = event.target.value + "-";
      }
    });
});
Avatar billede gigi1 Nybegynder
06. december 2012 - 16:31 #7
Svar.
Avatar billede gigi1 Nybegynder
06. december 2012 - 16:31 #8
Smid svar hvis du vil have point.
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