Avatar billede nemlig Professor
12. august 2010 - 13:25 Der er 16 kommentarer og
1 løsning

Vis input-regel i input-felt- nedtonet

Hejsa.
Jeg har et input-felt, hvor der fx. skal skrives en dato i formattet dd-mm-åååå.

Jeg vil gerne vise i inputfeltet "dd-mm-åååå" nedtonet, således brugeren kan se input-reglen. Og når feltet er i focus, skal input-reglen fjernes.

Nogen bidrag / link.
Avatar billede majbom Novice
12. august 2010 - 14:47 #1
kan du ikke sætte value til 'ddmmåååå' eller hvad det nu skal være og en style der gør teksten nedtonet og ved onfocus sætte value til '' (tom) og style til normal?
Avatar billede jokkejensen Novice
12. august 2010 - 15:08 #2
Her er et hurtigt smedet plugin til www.jquery.com

<style type="text/css">
        .notfilled{background-color: Gray;}
        .ok{background-color: White;}
        .err{background-color:Red;}
    </style>
    <input type="text" id="Dato" name="Dato" maxlength="10"/>
    <script type="text/javascript">
               
       
            (function($){
            $.fn.fieldFix = function(options) {

              var defaults = {
              defaultValue: "",
              regEx: "",
              emptyClass: "notfilled",
              okClass: "ok",
              errorClass: "err",
              errorMessage: ""
              };
              var options = $.extend(defaults, options);
               
              return this.each(function() {
                    curVal = $(this).val();
                   
                    //Når siden hentes
                    if(curVal == '' || curVal == options.defaultValue)
                    {
                        $(this).val(options.defaultValue);
                        $(this).attr('class', options.emptyClass);
                    }
                    //Når brugeren sætter musen i feltet                   
                    $(this).focus(function(){
                        if($(this).val() == options.defaultValue)
                        {
                            this.value = "";
                        }
                   
                    });
                    //Når brugeren forlader feltet
                    $(this).blur(function(){                       
                        if(this.value.match(options.regEx) != null)
                        {
                            $(this).attr("class", options.okClass);
                            $("#err_"+$(this).attr('id')).remove();
                        }else
                        {
                            $(this).attr("class", options.errorClass);
                            $(this).focus();
                            $(this).parent().append("<strong id='err_"+$(this).attr('id')+"'>"+options.errorMessage+"</strong>")
                        }
                    });
              });
            };
            })(jQuery);
           
            jQuery("#Dato").fieldFix({defaultValue:"dd-mm-åååå", regEx: /^\d{2}\-\d{2}\-\d{4}$/, errorMessage: "Skal være i formatet dd-mm-åååå"});
       
    </script>
Avatar billede majbom Novice
12. august 2010 - 16:17 #3
er det ikke lidt overkill at bruge jquery til noget så simpelt?
Avatar billede majbom Novice
04. november 2010 - 14:30 #4
nemlig?
Avatar billede nemlig Professor
04. november 2010 - 21:29 #5
Sorry - jeg er desværre kommet fra det igen, men må hellere få kigget på det nu.
Javascript er stadig lidt svært for mig.
Kan du give et forslag til, hvordan indholdet slettes ved onfocus.
Hvad sker der så, når jeg skriver en dato, og der klikkes i feltet igen (altså en ny onfocus) - slettes datoen så igen? Jeg mener det ikke, da datoen så er hægtet på "name".
Avatar billede majbom Novice
04. november 2010 - 21:40 #6
<script type="text/javascript">
  function changeTextGotFocus(elm){
      if(elm.value==elm.defaultValue){
        elm.value = "";
        elm.className = 'normal';
      }
  }

  function changeTextLostFocus(elm){
      if(elm.value==elm.defaultValue || elm.value==""){
        elm.value = elm.defaultValue;
        elm.className = 'greyedOut';
      }
  }
</script>


<input type="text" value="ddmmåååå" onfocus="changeTextGotFocus(this)" onfocus="changeTextLostFocus(this)">


noget i den stil...
Avatar billede nemlig Professor
04. november 2010 - 22:13 #7
OK tak for det, men lige for at være helt med.

1. Er 'normal' og 'greyedOut' nogle Style's jeg skal definere, så jeg selv kan bestemme udseendet?

2. Nogle af input-felterne kan have nogle værdier, som er hentet ind fra MySQL, hvorved value i forvejen kan have en værdi.
Men det kan jeg vel styre med noget if.....

if($row['dato']) { //Hvis værdi, så brug denne input
echo '
<input type="text" value="'.$row['dato'].'">';
} else { //Ellers brug denne her:
echo '
<input type="text" value="ddmmåååå" onfocus="changeTextGotFocus(this)" onfocus="changeTextLostFocus(this)">';
}

Eller ser du et problem i dette?
Avatar billede nemlig Professor
04. november 2010 - 22:27 #8
øhh - skal der være 2 x onfocus i input-delen?
Avatar billede majbom Novice
04. november 2010 - 22:28 #9
du kan faktisk gøre sådan her:

<input type="text" value="<?php echo (isset($row['dato']))?$row['dato']:'ddmmåååå';?>" onfocus="changeTextGotFocus(this)" onfocus="changeTextLostFocus(this)">';


så vil den virke på samme måde uanset om den er fyldt med noget fra db eller med 'ddmmåååå' så hvis det er fra db og der står '12042010' og du tømmer feltet og forlader det, vil det blive gråt (eller hvordan du nu styler det) og den org. dato fra db vil stå der igen.

det ved jeg så ikke om er smart eller ej i dit tilfælde, ellers laver du det bare som du skrev i #7 :)

og ja, de 2 styles skal du selv få lov at lege med ;)
Avatar billede majbom Novice
04. november 2010 - 22:38 #10
nej den sidste skal være onblur - jeg glemte bare at ændre den :)
Avatar billede nemlig Professor
04. november 2010 - 22:39 #11
Sejt - men det driller med stylen. Uanset hvordan jeg designer stylen 'greyedOut', så virker det ikke, mens stylen 'normal' virker.
Er det korrekt, at der er 2 x onfous i input-feltet?
Avatar billede nemlig Professor
04. november 2010 - 22:39 #12
Hov - den sidste krydsede dit svar. Det prøver jeg lige.
Avatar billede nemlig Professor
04. november 2010 - 22:58 #13
Det driller lidt....
For mig at se, er jeg nødt til at have defineret en style på inputfeltet, fx sådan her:

<input type="text" class="form" value....osv

Ellers vises inputfeltet blot som standard, når siden indlæses.
Jeg vil jo netop gerne have, at value vises med en anden style (nedtonet) allerede ved indlæsningen af input-formularen.

Problemet er bare, at når jeg hopper ud af feltet igen, så vises det netop indtastede nedtonet. Det er vel pga. at stylen "form" igen "tager over".
Avatar billede majbom Novice
05. november 2010 - 09:18 #14
ja stylen greyedOut skal naturligvis sættes på elementet ved load - den havde jeg lige misset...

du kan se det i funktion hér: http://majbom.com/testarea/exp/916173/
Avatar billede nemlig Professor
05. november 2010 - 15:38 #15
Tak for din tålmodighed. Så kører det. Sendt venligst et svar.
Avatar billede majbom Novice
05. november 2010 - 17:44 #16
selv tak :)
Avatar billede majbom Novice
05. november 2010 - 18:51 #17
tfp :)
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