Avatar billede jetobi Juniormester
16. august 2011 - 21:14 Der er 9 kommentarer og
1 løsning

java multi check box problem

Jeg har dette script, som jeg er rimlig irreteret på. Problemet er at jeg gerne vil have den in i en anden form, men det virker kun hvis det er til forskellige form, som i kan se. og det virker ikke hvis det ligger i en form? hvordan laver jeg dette javascript om til det virker ved en form, istedet for det skal ligge i to forskellige?


<script type="text/javascript">
function checkAll()
{
var check_del_len = document.forms[1].check_del.length;
document.getElementById('st_val').value='';

for ( i = 0; i<check_del_len ; i++)
{
  document.forms[1].check_del[i].checked=true;
  document.getElementById('st_val').value+=document.forms[1].check_del[i].value+',';

  }
  fin_str =  document.getElementById('st_val').value;
 
  document.getElementById('st_val').value  = fin_str.replace(',on,','');
 
}

function clearAll()
{
var check_del_len = document.forms[1].check_del.length;
for ( i = 0; i<check_del_len ; i++)
{
  document.forms[1].check_del[i].checked=false;
  document.getElementById('st_val').value='';
 
  }
}



function test()
{
var check_del_len = document.forms[1].check_del.length;
if(check_del_len==0)
{
document.getElementById('st_val').value ='';

}
document.getElementById('ch_all').checked =false;
document.getElementById('st_val').value ='';

for ( i = 0; i<check_del_len ; i++)
{
  if(document.forms[1].check_del[i].checked)
  {
  document.getElementById('st_val').value+=document.forms[1].check_del[i].value+',';
   
    }
  }
 
   
  fin_str =  document.getElementById('st_val').value;
  document.getElementById('st_val').value  = fin_str.replace(',on,','');
 
}
</script>
<script>
function validate()
{
if(document.getElementById('st_val').value=='')
{
  alert('Select Tutorials');
  return false;
  }
  else
  {
  return true;
  }
  }
</script>



   
     
           
           
           
              <form  method="post">
            <input type="text" id="st_val" name="sport" style="border:#000000 1px solid" >
                <br />
           
      Alle<input type='checkbox' id="ch_all" name='checkbox' onClick="if(this.checked)checkAll(); else clearAll()" /><br>
    </span>
   
Fodbold <input type='checkbox'  name='check_del' onclick='test()' value='Fodbold' /><br>
    Tennis<input type='checkbox'  name='check_del' onclick='test()' value='Tennis' /><br>
    Badminton<input type='checkbox'  name='check_del' onclick='test()' value='Badminton' /><br>
Ishockey<input type='checkbox'  name='check_del' onclick='test()' value='Ishockey' /><br>
    Amerikansk fodbold<input type='checkbox'  name='check_del' onclick='test()' value='Amerikansk fodbold' />
</form>
Avatar billede olsensweb.dk Ekspert
16. august 2011 - 22:13 #1
prøv at kigge på http://www.eksperten.dk/spm/936307
bare til lidt inspiration
Avatar billede jetobi Juniormester
16. august 2011 - 22:49 #2
jamen problemet er at jeg vil have mine "checks" i en input text field, så jeg bare kan insert den til min database?
Avatar billede olsensweb.dk Ekspert
17. august 2011 - 00:11 #3
<input type='checkbox'  name='check_del'
skal laves til et array
<input type='checkbox'  name='check_del[]'

i det array (check_del) du for over serverside, vil du have værdierne for alle dem der er checked, og så kan du samle demserverside til en komma seperaret string der
jeg har også prøvet at lave det js mæssigt.
jeg har kun lavet det for checkAll og clearAll, så må du selv lige kigge på test

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <title></title>
    <style type="text/css">
    </style>
<script type="text/javascript">
function checkAll(frm, ar_name){   
    var check_del_len = document[frm][ar_name].length;   
    var fin_str="";
    for(i=0; i<check_del_len; i++){
            document[frm][ar_name][i].checked=true; 
            fin_str +=document[frm][ar_name][i].value;
            fin_str +=",";
    } 
    document.getElementById('st_val').value  = fin_str;   
}

function clearAll(frm, ar_name){
    var check_del_len = document[frm][ar_name].length;
    for(i=0; i<check_del_len; i++){
            document[frm][ar_name][i].checked=false;           
    } 
    document.getElementById('st_val').value='';
}
</script>
</head>
<body>
<form name ="form1" method="post">
<input type="text" id="st_val" name="sport" style="border:#000000 1px solid" >
<br /> 
Alle                <input type='checkbox' id="ch_all" name='checkbox' onClick="if(this.checked)checkAll('form1', 'check_del[]'); else clearAll('form1', 'check_del[]')" /><br>
Fodbold             <input type='checkbox'  name='check_del[]' onclick='test()' value='Fodbold' /><br>
Tennis                <input type='checkbox'  name='check_del[]' onclick='test()' value='Tennis' /><br>
Badminton            <input type='checkbox'  name='check_del[]' onclick='test()' value='Badminton' /><br>
Ishockey            <input type='checkbox'  name='check_del[]' onclick='test()' value='Ishockey' /><br>
Amerikansk fodbold    <input type='checkbox'  name='check_del[]' onclick='test()' value='Amerikansk fodbold' />
</form>
</body>
</html>
Avatar billede olsensweb.dk Ekspert
17. august 2011 - 09:09 #4
her er den løsning jeg ville bruge hvis jeg har forstået dit spm ret:
index.html
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <title></title>
    <style type="text/css">
    </style>
<script type="text/javascript">
function checkAll(frm, ar_name){   
    var check_del_len = document[frm][ar_name].length;   
    for(i=0; i<check_del_len; i++){
            document[frm][ar_name][i].checked=true; 
    } 
}

function clearAll(frm, ar_name){
    var check_del_len = document[frm][ar_name].length;
    for(i=0; i<check_del_len; i++){
            document[frm][ar_name][i].checked=false;           
    } 
}
</script>
</head>
<body>
<form name ="form1" method="post" action ="kontrol.php">         
Alle                <input type='checkbox' id="ch_all" name='checkbox' onClick="if(this.checked)checkAll('form1', 'check_del[]'); else clearAll('form1', 'check_del[]')" /><br> 
Fodbold             <input type='checkbox'  name='check_del[]'  value='Fodbold' /><br>
Tennis                <input type='checkbox'  name='check_del[]'  value='Tennis' /><br>
Badminton            <input type='checkbox'  name='check_del[]'  value='Badminton' /><br>
Ishockey            <input type='checkbox'  name='check_del[]'  value='Ishockey' /><br>
Amerikansk fodbold    <input type='checkbox'  name='check_del[]'  value='Amerikansk fodbold' />
<input type='submit'  name='send' value='send' />
</form>
</body>
</html>


kontrol.php
<?php
$check_del = $_POST['check_del'];
$lng = count($check_del);
$sport="";
for($i=0; $i<$lng; $i++){
    $sport .=$check_del[$i];
    $sport .=", ";
}
echo $sport; // dette skal du bare ligge i et felt i din db
?>


læg mærke til at test functionen er helt væk, jeg har slettet text indput boxen, og simplificeret de 2 js functioner, og man kan faktisk slå de 2 js functioner sammen, feks ved at overfører en ekstra parameter (true/false)
Avatar billede jetobi Juniormester
17. august 2011 - 12:34 #5
Hej ronols
gå ind her http://ung-stil.dk/test.php tryk på alle, der kommer variablerne op i input text, men resten gør ikke, ? hvorfor? det er kun når man trykker alle det virker?
Avatar billede olsensweb.dk Ekspert
17. august 2011 - 15:06 #6
>men resten gør ikke, ? hvorfor? det er kun når man trykker alle det virker?
som jeg skrev i #3 "jeg har kun lavet det for checkAll og clearAll, så må du selv lige kigge på test"
så functionen test() er ikke lavet ennu, og det er den der aktiverer enkeltvis
( <input type='checkbox'  name='check_del[]' onclick='test()}' value='xxxxx' /> )
Avatar billede olsensweb.dk Ekspert
17. august 2011 - 15:40 #7
et hurtigt bud på test() kunne værer
function test(){
    var fin_str="";
    var lng = document.form1["check_del[]"].length;    
    for(i=0; i<lng; i++){
        if(document.form1["check_del[]"][i].checked){
            fin_str +=document.form1["check_del[]"][i].value;
            fin_str +=",";
        }           
    } 
    document.getElementById('st_val').value  = fin_str;   
}

den kan direkte sættes ind i din code, men jeg mener den bør omskrives så du tager form name (form1) og array name (check_del[]) over som parameter, som der gøres med checkAll('form1', 'check_del[]');
du kunne lade dig inspirer af checkAll(frm, ar_name)
og om ikke andet har du her i tråen set 2 måder at tilgå array på

man du bør nok gå ind og fjerne det sidste komma i stringen der skrives i st_val
google "js remove trailing comma" http://www.google.dk/search?q=js+remove+trailing+comma
ref http://www.ozzu.com/programming-forum/remove-last-character-t46875.html

utested
document.getElementById('st_val').value  = fin_str;   
bør værer
document.getElementById('st_val').value  = fin_str.slice(0, -1);
Avatar billede jetobi Juniormester
23. august 2011 - 01:41 #8
hej ronols, forstod ikke ret meget af det sidste?
Avatar billede olsensweb.dk Ekspert
23. august 2011 - 07:17 #9
hvad er det du ikke forstod ved det sidste ??
jeg har lagt en demo op her http://olsensweb.dk/test/experten/spm/945211/945211.html
Avatar billede jetobi Juniormester
12. februar 2012 - 10:35 #10
lukket :)
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





White paper
Tidsbegrænset kampagne: Overvejer du at udskifte eller tilføje printere i din forretning? Vi kan tilbyde én eller flere maskiner gratis