Avatar billede artico Novice
04. juni 2012 - 18:13 Der er 17 kommentarer og
1 løsning

else if gør send aktiv?

Hei, Jeg har disse 6 radio knapper, jeg VIL have at brugeren vælger en i hver serie før send knappen bliver aktiv,
men det virker ikke rigtigt, er den en der har et bud på hvad jeg gør forkert?

HTML:
<td><input type="radio" name="mad_1" value="ja" id="mad_1a" onclick="changeMad();" /> | <input type="radio" name="mad_1" value="nej" id="mad_1b" onclick="changeMad();" />
<td><input type="radio" name="mad_2" value="ja" id="mad_2a" onclick="changeMad();" /> | <input type="radio" name="mad_2" value="nej" id="mad_2b" onclick="changeMad();" />
<td><input type="radio" name="mad_3" value="ja" id="mad_3a" onclick="changeMad();" /> | <input type="radio" name="mad_3" value="nej" id="mad_3b" onclick="changeMad();" />


Script

var m = document;
    function gE(id){return m.getElementById(id)};
    function changeMad(){
        if(gE('mad_1a').checked) gE('mySubmit_mad').disabled = false; else if (gE('mad_1b').checked) gE('mySubmit_mad').disabled = false;
        else gE('mySubmit_mad').disabled = true;
       
      if(gE('mad_2a').checked) gE('mySubmit_mad').disabled = false; else if (gE('mad_2b').checked) gE('mySubmit_mad').disabled = false;
        else gE('mySubmit_mad').disabled = true;
     
      if(gE('mad_3a').checked) gE('mySubmit_mad').disabled = false; else if (gE('mad_2b').checked) gE('mySubmit_mad').disabled = false;
        else gE('mySubmit_mad').disabled = true;
Avatar billede olebole Juniormester
04. juni 2012 - 20:12 #1
<ole>

Det bliver under alle omstændigheder en hamrende ineffektiv kode, men du kan prøve:

var m = document;
function gE(id){return m.getElementById(id)};
function changeMad(){
    aElms, bFound, nFound = 0;
    for (var i=1; i<4; i++) {
        aElms = document.getElementsByName("mad_"+i);
        bFound = false;
        for (var j=0,k=aElms.length; j<k; j++) {
            if (aElms[j].checked) {
                bFound = true;
                break;
            }
        }
        if (!bFound) {
            return gE('mySubmit_mad').disabled = true;
        }
        nFound++;
    }
    if (nFound>2) return gE('mySubmit_mad').disabled = false;
    gE('mySubmit_mad').disabled = true;
}


/mvh
</bole>
Avatar billede olsensweb.dk Ekspert
04. juni 2012 - 20:21 #2
nu kom Ole lige før mig men!!

er det en fejl der i linje 2 ikke står 3b ??
så dette
if(gE('mad_3a').checked) gE('mySubmit_mad').disabled = false; 
else if (gE('mad_2b').checked) gE('mySubmit_mad').disabled = false;
else gE('mySubmit_mad').disabled = true;

skulle være
if(gE('mad_3a').checked) gE('mySubmit_mad').disabled = false;
else if (gE('mad_3b').checked) gE('mySubmit_mad').disabled = false;
else gE('mySubmit_mad').disabled = true;



hvis ovenstående er sandt kunne du omsrive functionen til
function changeMad(){
    var sum=0;
    sum += (gE('mad_1a').checked || gE('mad_1b').checked ) ? 1:0; // grp 1
    sum += (gE('mad_2a').checked || gE('mad_2b').checked ) ? 1:0; // grp 2
    sum += (gE('mad_3a').checked || gE('mad_3b').checked ) ? 1:0; // grp 3
    gE('mySubmit_mad').disabled = (sum==3)? true : false; // alle 3 grupper sakl være selected
}

kna sikkert optimeres, men lavet hurtigt

har ikke tested Ole´s code
Avatar billede olebole Juniormester
04. juni 2012 - 20:28 #3
"har ikke tested Ole´s code" >> Don't worry ... that makes two of us  *D
Avatar billede artico Novice
04. juni 2012 - 20:48 #4
he-he.. ronols men det virker ikke ? øv, mon det er mig? Det er som det du siger "Skal være" og min HTML ser således ud:

<input type="radio" name="mad_1" value="ja" id="mad_1a" onclick="changeMad();" /> .. osv

OG

<input type="radio" name="mad_1" value="nej" id="mad_1b" onclick="changeMad();" /> .. osv

Men ingen aktiv send, når grupperne er valgt :-(
Avatar billede olsensweb.dk Ekspert
04. juni 2012 - 21:07 #5
det rettes nemt
gE('mySubmit_mad').disabled = (sum==3)?  true : false;
skulle være
gE('mySubmit_mad').disabled = (sum!==3)?  true : false;

demo http://experten.olsensweb.dk/964024/
Avatar billede olebole Juniormester
04. juni 2012 - 21:12 #6
#1 virker også, hvis man husker keyword'et var:

function changeMad(){
    var aElms, bFound, nFound = 0;
Avatar billede artico Novice
04. juni 2012 - 22:03 #7
Yess .. ronols så kan jeg komme videre, mange tak for hjælpen og når jeg blir stor og dygtig (Håber stadig!) vil jeg prøve olebole´s kode, men lige nu kan jeg bedre overskue ronols :-)

Send et svar...
Avatar billede olebole Juniormester
04. juni 2012 - 22:08 #8
Kik gerne på min af nysgerrighed. Den er en anelse mere dynamisk end ronols' - men dramtisk mindre effektiv. Løkker i løkker er aldig lykken  *o)

Brug ronols' løsning  =)
Avatar billede olebole Juniormester
04. juni 2012 - 22:10 #9
- og den er ikke bare "dramtisk mindre effektiv". Den er faktisk også dramatisk mindre effektiv  =)
Avatar billede olebole Juniormester
04. juni 2012 - 23:13 #10
Hvis du skriver onclick="changeMad(this);", vil jeg meget hellere være ved denne super simple version  =)

var m = document;
function gE(id){return m.getElementById(id)};

var sCheck = "123";
function changeMad(elm) {
    var n = elm.getAttribute("name").split("_").pop();
    sCheck = sCheck.replace(n, "");
    if (sCheck.length<1) {
        gE('mySubmit_mad').disabled = false;
    }
}
Avatar billede mireigi Novice
04. juni 2012 - 23:37 #11
Med JQuery kan det gøres meget simpelt:

Libraries


Code
Du skal selv erstatte fremhævet tekst med dine udgaver
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Radio Check Multiple</title>
    <script type="text/javascript" src="jquery-1.7.2.js"></script>
    <script type="text/javascript">
        function changeMad()
        {
            if ($("*[id*=mad_]:checked").length == 3)
                $("#mySubmit_mad").removeProp("disabled");
            else
                $("#mySubmit_mad").propAttr("disabled", "disabled");
        }
    </script>
</head>
<body>
    <table>
        <tr>
            <td>
                <input type="radio" name="mad_1" value="ja" id="mad_1a" onclick="changeMad();" />
                |
                <input type="radio" name="mad_1" value="nej" id="mad_1b" onclick="changeMad();" />
            </td>
        </tr>
        <tr>
            <td>
                <input type="radio" name="mad_2" value="ja" id="mad_2a" onclick="changeMad();" />
                |
                <input type="radio" name="mad_2" value="nej" id="mad_2b" onclick="changeMad();" />
            </td>
        </tr>
        <tr>
            <td>
                <input type="radio" name="mad_3" value="ja" id="mad_3a" onclick="changeMad();" />
                |
                <input type="radio" name="mad_3" value="nej" id="mad_3b" onclick="changeMad();" />
            </td>
        </tr>
        <tr>
            <td>
                <input type="button" id="mySubmit_mad" value="Send" disabled="disabled" />
            </td>
        </tr>
    </table>
</body>
</html>



Jeg vil dog anbefale at bruge en class som fx "RequiredRadio" til at markere de Radio buttons du vil have med. Det gør det hele meget simplere. Så kan du i stedet bruge:

if ($(".RequiredRadio:checked").length == 3)
Avatar billede olebole Juniormester
04. juni 2012 - 23:48 #12
#11 hører også til i afdelingen for ineffektiv kode  =)
Avatar billede mireigi Novice
04. juni 2012 - 23:52 #13
Det kommer vel an på, hvordan JQuery laver sin opslag?

Hvis den løber alle elementer igennem for at finde hvert element, så ja.

Hvis den ved indlæsning af DOM'en laver en form for index, kan det ske ret så hurtigt.

Har du et link til, hvor der er en beskrivelse af "inner workings"?
Avatar billede olsensweb.dk Ekspert
04. juni 2012 - 23:53 #14
så fik du lige stifted bekendskb med "js if else shorthand" også kaldet "conditional operator" http://en.wikipedia.org/wiki/%3F:#JavaScript
som ole også skriver er der mere manuelt vedligeholdelse i min vertion, men den er meget simpel (KISS)

#10 vil jeg meget hellere være ved denne super simple version  =)
forstår jeg godt, betydelig pænere en første vertion

#11 det vil kræve spørgeren i forvejen bruger jquery, ellers er det 100K overhead for så lidt

#10+#11
disse vertioner ville da være værd at overveje, men det er jo ikke os der skal vedligeholde spørgerens code, og hvis spørgeren ikke forstår din code, bør han starte med min code fra #2 indtil yderligere kompetancer er opnået.
Avatar billede olebole Juniormester
05. juni 2012 - 00:06 #15
#13: Med den selector, du bruger, kalder jQuery med document.getElementsByClassName i de browsere, der understøtter den.

Ellers kaldes med document.getElementsByTagName("*"), hvorefter alle dokumentets elementer traverseres for at finde match på className.

Under alle omstændigheder skal jQuery traversere alle de berørte radios for at tjekke for checked, hvergang funktionen kaldes.
Avatar billede olebole Juniormester
05. juni 2012 - 00:12 #16
'Har du et link til, hvor der er en beskrivelse af "inner workings"?' >> Nej, jeg har selv gået koden igennem og fundet ud af, hvordan den fungerer.

@ronols: Helt enig  =)
Avatar billede artico Novice
02. august 2012 - 13:35 #17
Send svar så vi kan lukke butikken :-)
Avatar billede olsensweb.dk Ekspert
02. august 2012 - 13:53 #18
får du her
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