Avatar billede simsen Mester
14. juni 2010 - 02:39 Der er 3 kommentarer og
1 løsning

Hente class name 2 udfra classname i jQuery

Hej,

Jeg har en textbox hvor der er to class names:

<asp:TextBox ID="TextBox1" runat="server" TextMode="MultiLine" Width="100" Height="100" CssClass="countdown limit_20" MaxLength="20"></asp:TextBox>

Nu har jeg så en funktion, hvor jeg skal tælle antal karakterer der skrives i tekstboksen. For at finde ud af hvor mange karakterer tilføjer jeg en class (limit_20), det er så 20, der interesseret mig - hvordan får jeg den ind i min variabel i funktionen:

$(function() {
        var limit = $(this).(".countdown").attr("class");
        limit = substring(limit.indexOf("_") + 1);

        $(".countdown").keyup(function() {
            var len = $(this).val().length;
            if (len > limit) {
                this.value = this.value.substring(0, limit);
            }
            $(".remaining").text(limit - len + " characters left");
        });
    });

Hvis jeg bruger var limit = 20; så fungerer funktionen men som skrevet, jeg vil så gerne have de 20 ud fra limit_20. Hvordan gør jeg det?

mvh
simsen :-)
Avatar billede intenz Novice
14. juni 2010 - 09:30 #1
Du skal hente alle classerne ud fra elementet og loope dem igennem og tjekke efter en limit_ og så hente antallet.

Sådan her:

$(function() {
    var limit = 30; // default limit

    $(".countdown").keyup(function(e) {
   
        var classList = $(".countdown").attr('class').split(' ');
        $.each(classList, function(index, item){
            if (item.indexOf('limit_') === 0) {
                limit = item.substr(6, item.length-6);
            }
        });

        var len = $(this).val().length;
        if (len > limit) {
            this.value = this.value.substring(0, limit);
        }
        $(".remaining").text(limit - len + " characters left");
    });
});


Man kan måske ved fordel gemme limit efter det har kørt første gang, så den ikke skal gennem loopet hver gang keyup fyres af.
Avatar billede intenz Novice
14. juni 2010 - 09:40 #2
Man kan egentlig også lave den uden loopet, hvilket nok er en bedre løsning:

$(function() {
    var limit = 30; // default limit

    $(".countdown").keyup(function(e) {
   
        var classList = $(".countdown").attr('class');
        if ((i = classList.indexOf('limit_')) !== -1) {
            limit = classList.substr(i+6, classList.length-(i+6));
        }

        var len = $(this).val().length;
        if (len > limit) {
            this.value = this.value.substring(0, limit);
        }
        $(".remaining").text(limit - len + " characters left");
    });
});
Avatar billede intenz Novice
14. juni 2010 - 09:41 #3
Der bliver det hele så bare mere problematisk hvis limit_xx sidder mellem flere andre klasser og ikke altid sidst.
countdown limit_20 anden_klasse

Men det kan vel løses hvis du har behovet.
Avatar billede simsen Mester
14. juni 2010 - 12:47 #4
intenz

Mange tak for hjælpen. Jeg har valgt den med loopet, da jeg ikke vil huske på, at den altid skal stå sidst i class navnet.

Vender nok frygtelig tilbage, da jeg har tænkt mig at smide det meste af diverse check ud i javascript på det her nye site, jeg er igang med, inden jeg også checker serverside (så jeg kommer til at minimere trykket på serveren) for de brugere, der har slået javascript fra :-)
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