Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JS] IF + checkbox + wyświetlanie
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
3miel
Witam,

mam checkboxa z takim kodem:
Kod
<input type="checkbox" id="gatunek" name="gatunek" value="1"
onclick="if(this.checked){ document.getElementById(\'g\').innerHTML=\', gatunek\';
}else{document.getElementById(\'g\').innerHTML=\'\';}"> <label for="gatunek">gatunek</label>
...
<span id="g"></span>

i jak to przerobić, bo mam kilka elementów (<span id="g"></span>). Myślałem że jak dam NAME to bedzie ok, ale nei działa (zamiast document.getElementById->document.getElementByName i zamiast id="g"->name="g")

i jeszcze jedno pytanie. jak sprawdzić czy inny chceckbox jest zaznaczony?
zrobiłem coś takiego:
Kod
if(document.getElementById(\'rok\').checked){document.getElementById(\'rok\').innerHTML=\'buuuuu\';}
i dałem to do tego wczesniejszego IF'a do ELSE i niestety nie działa sad.gif

Da się to w jakiś sposób rozwiązać?
revyag
Tak na początek to opisz dokładnie co chcesz osiągnąć, bo nie do końca można to wywnioskować z Twojej wypowiedzi.
Nie wsadzaj dłuższych instrukcji pod określone zdarzenia, tylko wyrzuć to do zewnętrznej funkcji.
Co do pytania:
nie możesz mieć kilku elementów span o tym samym id. Id jest czymś unikalnym i dwa elementy nie mogą mieć tego samego id.
Nie ma takiej metody: getElementByName, a atrybut name jest jeśli dobrze pamiętam zabroniony w elmentach nie związanych z formularzami.
Masz kilka elementów span tak ? Jesli chcesz coś do nich wsadzić za jednym zamachem to nadaj im atrybut class. A następnie na podstawie tego atrybutu uzupełniasz ich zawartość.
Kod
<script type="text/javascript">

function insTxt(cd,cl) {
    
    var elems = document.getElementsByTagName("span");
    
    for(var i = 0; i < elems.length; i++) {
        if(elems[i].className == cl) {
            if(cd) {
                elems[i].innerHTML = "gatunek";
            } else {
                elems[i].innerHTML = "";
            }
        }
    }
  
}
</script>

  1. <input type="checkbox" id="gatunek" name="gatunek" value="1" onclick="insTxt(this.checked,'klasa')">
  2. <br /><br />
  3. <span class="klasa"></span><br /><br />
  4. <span class="klasa"></span><br /><br />

Co do drugiego pytania to gdzie chcesz sprawdzać czy ten checkbox jest zaznaczony ?
3miel
Cytat
Tak na początek to opisz dokładnie co chcesz osiągnąć, bo nie do końca można to wywnioskować z Twojej wypowiedzi.

http://gimbuda.szkola.pl/3miel/index.php?a...kie&sortowanie= i tutaj mam CHECKBOXY (nazwa polska, orginalna, ork, gatunek...) i na dole ma sie to wyświetlać (podgląd). teraz jezeli zaznacze NAZWA PL i NAZWA ORG. to ma byc tak jak jest, ale jak zaznacze tylko NAZWA ORG to zeby była bez nawiasów.

Cytat
Nie wsadzaj dłuższych instrukcji pod określone zdarzenia, tylko wyrzuć to do zewnętrznej funkcji.
dlaczego nie? Przecierz wszytko jest ok.
Cytat
nie możesz mieć kilku elementów span o tym samym id. Id jest czymś unikalnym i dwa elementy nie mogą mieć tego samego id.
wiem, ale nie wiem jak zrobić zeby mozna bylo zmieniac od razu wiecej SPANów
Cytat
Masz kilka elementów span tak ? Jesli chcesz coś do nich wsadzić za jednym zamachem to nadaj im atrybut class. A następnie na podstawie tego atrybutu uzupełniasz ich zawartość.
tylko że ja mam kilkanaście SPANów i tylko kilka znich ma się zmienić. Wiec twoja metoda niestety odpada:/
---EDIT----- juz cos z tym kombinuje, jednak działa smile.gif
Cytat
Co do drugiego pytania to gdzie chcesz sprawdzać czy ten checkbox jest zaznaczony ?
w IF z checkboxa (np. w checkboxu z NAZWY ORG. che sprawdzic czy jest zaznaczony checkbox z NAZWY PL)

--------EDIT---------
jeszcze jedno, bo teraz mam class i SELECT mi coś nei działa.

normanie miałem:
Kod
"document.getElementById(\'pkt\').innerHTML=this.value"

i zmieniłem na:
Kod
onchange="document.getElementsByTagName("span").className==\'pkt\'.innerHTML=this.value"

i niestety nic. Możecie mi pomóc?


PROSZ! to dla mnie ogromnie ważne, a zatrzymałym sie na takiem problemie!
revyag
Cytat
Cytat

Nie wsadzaj dłuższych instrukcji pod określone zdarzenia, tylko wyrzuć to do zewnętrznej funkcji.

dlaczego nie? Przecierz wszytko jest ok./

Dlatego żeby kod był bardziej czytelny, wtedy trudniej o pomyłkę, łatwiej modyfikować.
Cytat
Kod
if(document.getElementById(\'rok\').checked){document.getElementById(\'rok\').innerHTML=\'buuuuu\';}

Przypisujesz innerHTML do checkboxa, chyba chciałeś do spana snitch.gif
Cytat
Kod
onchange="document.getElementsByTagName("span").className==\'pkt\'.innerHTML=this.value"

no takie coś na pewno nie przejdzie snitch.gif
Metoda document.getElementsByTagName zwróci tablicę z elementami któryc tag określonym w jej atrybucie.
Powiedz co chciałeś osiągnąć, bo ten zapis niewiele mówi
3miel
dobra, mam juz coś zrobione:
Kod
function select(text) {
   var elems = document.getElementsByTagName("span");
   for(var i = 0; i < elems.length; i++) {
       if(elems[i].className == 'pkt') {
                elems[i].innerHTML = text;
       }
   }
  }
i działa smile.gif.

Ale kolejne pytanie:

Jak sprawdzic czy ceckbox jets zaznaczony? jezlei tak to podobne działanie co select - zmian tresci w spanie.

powiem najpierw co che osiagnąc.
-mam 2 CHeckboxy: Nazwa polska(NP) i Nazwa orginalna(NO)
-i teraz wyswietla to sie w taki sposó:
"Nazwa polska (nazwa orginalna)"

i jzelie sa znazaczone te 2 checkboxy to si ewszytko wyswietla, jezeli tylko NP to wyswietla sie tylko NP, a jak NO to tylko NO, ale tutaj jest probelm, bo jezlei bedize sie wyswietlac NO to bedzie w nazwiasach a mi chodzi o to zeby ich nie było (tylko w przypadku gdy NP jest wyłączona!)

dlatgo najlepiej bediz ezrobic osobna funkcje do nawiasó, sprawdzającą 2 warunki jednoczesnie.

W jaki sposób to zrobić?
nospor
czy checkbox zaznaczony
  1. function isChecked(idCheckbox)
  2. {
  3. obj = document.getElementById(idCheckbox);
  4. if (obj.checked)
  5. {
  6. alert('zaznaczony');
  7. return true;
  8. }
  9. else
  10. {
  11. alert('niezaznaczony');
  12. return false;
  13. }
  14.  
  15. }
reszte robisz podobnie jak miales
revyag
Kod
<script type="text/javascript">

function check() {
    var org = document.getElementById("org");
    var pol = document.getElementById("pol");
    var mesg = document.getElementById("txt");
    
    if(pol.checked && !org.checked) {
        mesg.innerHTML = "Nazwa polska";    
    }
    if(org.checked && !pol.checked) {
        mesg.innerHTML = "Nazwa orginalna";    
    }
    if(org.checked && pol.checked) {
        mesg.innerHTML = "Nazwa polska(Nazwa orginalna)";    
    }
    if(!org.checked && !pol.checked) {
        mesg.innerHTML = "";    
    }
}

</script>

  1. Nazwa polska: <input type="checkbox" id="pol" onclick="check()" /><br />
  2. Nazwa orginalna: <input type="checkbox" id="org" onclick="check()" /><br /><br />
  3. <span id="txt"></span>

Chyba o to chodzi. Troche to łopatologiczne, ale nie moge wymyślić nic innego snitch.gif
3miel
ale z tego co widze to revyag masz to zrobione dla <span id=txt>, a ja musze to mieć na <span class=txt>.

Jeżęli byś mógł to powiedz co mam poprawić, o u mnei nie najlepiej z JS :/ .

Pozdro i Dzięki.
revyag
Kod
function check() {

    var org = document.getElementById("org");
    var pol = document.getElementById("pol");
    var mesg = '';
    
    if(pol.checked && !org.checked) {
        mesg = "Nazwa polska";    
    }
    if(org.checked && !pol.checked) {
        mesg = "Nazwa orginalna";    
    }
    if(org.checked && pol.checked) {
        mesg = "Nazwa polska(Nazwa orginalna)";    
    }
    if(!org.checked && !pol.checked) {
        mesg = "";    
    }
    
    var elems = document.getElementsByTagName("span");

    for(var i = 0; i < elems.length; i++) {
        if(elems[i].className == 'pkt') {
           elems[i].innerHTML = mesg;
        }
    }
}

Jeśli dobrze Cię zrozumiałem to będzie tak snitch.gif
3miel
teraz mam wyjazd, sprawdze jak wróce czyli pod wieczór smile.gif. Dzięki serdeczne i mam nadzieję że wszystko bedzie działać :].

Pozdro,
3miel

------------EDIT-------------
Po moich drobnych przeróbkach działa idealnie smile.gif Możecie sami przetestować smile.gif : http://www.gimbuda.szkola.pl/3miel/index.p...kie&sortowanie=
Nawet nie weidziecie jak bardzo jestem wam wdzieczny smile.gif

Dzieki,
pozdro,
3miel
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.