Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przerobienie funkcji - dodatkowy argument funkcji
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
3miel
Witam,
potrzebuje waszej pomocy, bo miałem zfobioną funkcję do zaznaczania wszystkich checkboxó i w zależnosci od tgo nie które submity miały być aktywne lub nie:
Kod
function selectAll(x,b) {
   if (typeof(x)=='string')x=document.getElementById(x);
   else { while(x=x.parentNode) { if (x.nodeName.toLowerCase()=='form')break;} }
   var ins=x.getElementsByTagName("input");
   for(j=0;j<ins.length;j++) { if(ins[j].type.toLowerCase()=="checkbox") { ins[j].checked=b;
   document.ble.edytuj.disabled=!b;
   document.ble.usun.disabled=!b;
   document.ble.pokaz.disabled=!b;
   document.ble.ukryj.disabled=!b;
} } }

onload=function(i,x,t){with(document.ble){
edytuj.disabled=true;
usun.disabled=true;
pokaz.disabled=true;
ukryj.disabled=true;
for(i=0;t=elements['opcja[]'][i++];){t.onchange=function(){sprawdz();}}
}}

function sprawdz(t,i,s){with(document.ble){
for(i=0,s=!0;t=elements['opcja[]'][i++];){if(t.checked){s=0;break;}}
edytuj.disabled=s;
usun.disabled=s;
pokaz.disabled=s;
ukryj.disabled=s;
}}


i wywołuje to w ten sposób:
  1. <? 
  2. echo '<form name="ble" action="panel.php" method="post">'; 
  3. // ... 
  4. echo '<input type="checkbox" name="opcja[]" value="'.$wers['id'].'" onchange="sprawdz()" id="'.$wers['id'].'">'; 
  5. //... 
  6. echo '<input type="button" onClick="selectAll(this,true)" value=" All "><input type="button" onClick="selectAll(this)" value="Null"> 
  7.  
  8. <input type="submit" name="edytuj" value=" "> 
  9. <input type="submit" name="usun" value=" ">'; 
  10. ?> 

I musze to przerobić, żeby zamiast "BLE" była nazwa zmiennej podanej na poczatku skrpytu(czyli nazwa formularza). Tylko Jak to wszystko pogodzić w JS, tzn jak dodac do funkcji kolejną zmienną i zastąpić wszystkie ble zmiennymi? Nie znam się na JS dlatego prszę was o pomoc!
LBO
Kod
zmienna = "BLE";
//code
document.getElementByName(zmienna).edytuj.disabled=!b; //itd
//code
3miel
możesz spróbowac zrobić pierwszy przykład bo coś mi nie wychodzi:/ Jak bede to widział to może zrozumiem.
LBO
pierwsza funkcja...
Kod
function selectAll(formName, x,b) {
  if (typeof(x)=='string') {
    x=document.getElementById(x);
  } else {
    while(x=x.parentNode) {
      if (x.nodeName.toLowerCase()=='form') {
        break;
      }
    }
  }
  var ins = x.getElementsByTagName("input");
  for(j=0;j<ins.length;j++) {
    if(ins[j].type.toLowerCase()=="checkbox") {
      ins[j].checked=b;
      document.getElementByName(formName).edytuj.disabled=!b;
      document.getElementByName(formName).usun.disabled=!b;
      document.getElementByName(formName).pokaz.disabled=!b;
      document.getElementByName(formName).ukryj.disabled=!b;
    }
  }
}
3miel
nie chce działać:/:
Kod
<form name="Marki" action="panel.php" method="post">
<input type="button" onClick="selectAll(Marki,this,true)" value=" All ">

Próbowałem tak wcześniej ale myślałem że źle robie, a tu jednak musi być wina czegoś innego:(
jpluzek
To jest nazwa formularza, którą przekazujesz do funkcji więc musi byc w apostrofach lub cudzysłowiach, bez tego nie ma prawa działac.

Kod
<form name="Marki" action="panel.php" method="post">
<input type="button" onClick="selectAll('Marki',this,true)" value=" All ">


Poza tym pytanie jakiej przeglądarki używasz. Firefox ma bardzo dobre raportowanie błędów w javascripcie, dlatego go polecam - zresztą polecam go również z wielu innych względów winksmiley.jpg. Kiedy wystąpi błąd w skrypcie wtedy wskaże ci nie tylko prawidłową linijkę ale i miejsce w linijce w którym wystąpił błąd. Nie to co badzIEwie, gdzie baaaardzo trudno sie często domyślic gdzie dokładnie jest błąd...
3miel
Zrobiłem tak jak radziłeś i dalej to samo:( Zaznacza tylko i wyłącznie 1 checkbox, a jest ich w sumie kilkanaście :/.
Firefoxem nie zgłasza żadnych błędów.
Gdize jest błąd?

-------------------------------------------
Postaowiłem wszystko cofnąc do pierowtnej postaci. Działało.
Następnie zmieniłem zamiast ble dałem getElementByName(formName) i na początku tej funkcji formName = 'ble'; i ku mojemu zdziwieniu nie działa. Więc wniosek prosty: getElementByName(formName) trzba zastąpić czymś innym... tylko czym?questionmark.gif

-------------------------------------------
Doszedłem do wniosku, żę tak naprawdę ten kod z tym zmieniamiem nie jest do zanzaczania/odznaczania pól! To kawałek wczesniej:
Kod
if (typeof(x)=='string') {
   x=document.getElementById(x);
} else {
   while(x=x.parentNode) {
     if (x.nodeName.toLowerCase()=='form') {
       break;
     }
   }
}
to jest prawdziwy kod odpowiedni za to! Jak ko zmienić, żeby był do okresleno formularza? BO mam na stronie 2 formularze i się sypie :/
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.