Avatar billede supermand69 Nybegynder
15. marts 2005 - 20:49 Der er 39 kommentarer og
1 løsning

confirm hvis checkbox er checked

jeg har et lille postsystem

http://clark.avansis.dk/test/confirm/

ud for nogle af mine posts er der et G som betyder at det er et gæstebogs indlæg... hvis man så har markeret en post med et G og trykker Slet skal der komme en confirm boks frem, men hvordan gør man det?? :)
Avatar billede thesurfer Nybegynder
15. marts 2005 - 21:47 #1
Her er et forslag.. du skal bruge følgende:

1) Noget der identificere disse G-poster.. f.eks. et id: id="gbook":
<input class="none" type="checkbox" name="post_id[]" value="156" onclick="change_background(this)" id="gbook">


2) en JavaScript funktion, der afvikles FØR submit.. den kaldes med stat_g(henvisning-til-formen-indsættes-her):

function stat_g(frm)
{
    elm = frm.elements;
    for(i=0; elm.length>i; i++)
    {
        if(elm[i].type == 'checkbox' && elm[i].checked && elm[i].id == "gbook")
        {
            if (!window.confirm('&Oslash;nsker du at arkivere "G"-posten: ' + elm[i].value)) elm[i].checked = false;
        }
    }
}


Jeg har testet dette, og det virker i Opera v7.54 + Internet Explorer 6.. jeg tester lige med FireFox 1.0..

PS: Hvis du indsætter flere data i "id", kan du f.eks. skrive "Vil du arkivere <emnet eller navnet indsættes her>?".. Der skal man så bare splitte id-værdien op..
Avatar billede thesurfer Nybegynder
15. marts 2005 - 21:48 #2
glemte at rette "&Oslash;nsker" til "Vil".. fixer jeg senere..
Avatar billede thesurfer Nybegynder
15. marts 2005 - 21:54 #3
Af en eller anden mærkeligt grund, vil min FireFox 1.0 ikke afvikle onclick-event'en..
Avatar billede supermand69 Nybegynder
15. marts 2005 - 21:55 #4
Jeg har ikke selv testet det, men ud fra hvad du skriver ser det ikke ud til at du helt har forstået - eller måske mig der ikke har formuleret mig korrekt :)

Der skal kun være en confirm når man vil slette posts og nogle G-posts er markeret... Der skal f.eks. ikke komme en confirm boks hvis jeg kun har markeret alm. posts :)
Avatar billede thesurfer Nybegynder
15. marts 2005 - 21:57 #5
Hvis du ser godt efter, vil du se elm[i].id == "gbook"! :-)

Og jo, jeg har forstået det :-)
Det gør netop det du ønsker :-)
Avatar billede thesurfer Nybegynder
15. marts 2005 - 21:58 #6
Læg mærke til, at det er en ny funktion! Det er ikke din gamle funtioner, der sætter kryds i alle checkbokse..
Avatar billede supermand69 Nybegynder
15. marts 2005 - 22:01 #7
nej, så godt den nye funktion der, men for mig så det bare ikke ud til at det virkede.. hehe..

jeg ser lige på det :)
Avatar billede supermand69 Nybegynder
15. marts 2005 - 22:16 #8
kan det også lade sig gøre at tælle hvor mange G-posts der er markeret?

der skal kun komme sådan en confirm ved slet og ikke arkivér :)
Avatar billede thesurfer Nybegynder
15. marts 2005 - 22:19 #9
Her er en opdate.. Hvis du indsætter "gbbok" + "emnet" + "navnet på afsenderen" i "id", kan du få den til at skrive:

---
Vil du at arkivere G-posten?:

"Re. tewt" skrevet af "$upe®m@n!? :: electrobeat.dk"
---

- id'en ser sådan ud (læg mærke til "*.*", der skiller data'ene ad):

<input class="none" type="checkbox" name="post_id[]" value="158" onclick="change_background(this)" id="gbook*.*hehe :)*.*$upe®m@n!? :: electrobeat.dk">

- JavaScript koden:

function stat_g(frm)
{
    elm = frm.elements;
    for(i=0; elm.length>i; i++)
    {
        gid = elm[i].id; // hent id-data
        if( elm[i].type == 'checkbox' && elm[i].checked && gid.indexOf("gbook") > -1) // se om det er en G-post
        {
            gid = gid.split("*.*"); // split data
            tmp = '"' + gid[1] + '" skrevet af "' + gid[2] + '"'; // smid besked over i variablen "tmp"

            // husk at det er "window.confirm", ellers virker det ikke i FireFox.
            if (!window.confirm('Vil du at arkivere G-posten?:\n\n' + tmp)) elm[i].checked = false;
        }
    }
}
Avatar billede thesurfer Nybegynder
15. marts 2005 - 22:21 #10
1) Ja, man kan godt tælle antallet af markerede G-poster

2) Så skal funktionen bare afvikles, i din Slet-knap.
Avatar billede thesurfer Nybegynder
15. marts 2005 - 22:22 #11
- Det er ved at være sent, så jeg smider lige et svar (just in case).. Accepter ikke svaret, før problemet er løst.
Avatar billede thesurfer Nybegynder
15. marts 2005 - 22:37 #12
- Opdateret kode..
Hvis der er markeret G-poster, vil den spørge dig om du vil vurdere hver eneste post. Hvis du vælger "cancel", springer den direkte videre (til sletning). Ellers skal du klikke OK/Cancel (cancel fjerne X i checkbox).

Koden:

function stat_g(frm)
{
    elm = frm.elements;
    AntalPoster = 0; // nulstil tælleren

    // tæl antal markerede G-poster:
    for(g=0; elm.length>g; g++)
    {
        gid = elm[g].id; // hent id-data
        if( elm[g].type == 'checkbox' && elm[g].checked && gid.indexOf("gbook") > -1) // se om det er en G-post
        {
        AntalPoster = AntalPoster + 1; // læg 1 til..
        }
    }

// Hvis antallet af poster er større end 0, vises en "confirm"-boks,
// hvor du kan vælge om du vil vurdere hver eneste post. Hvis du
// vælger "cancel", slettes alle poster.
if (AntalPoster > 0 && window.confirm('Antal markerede G-poster: ' + AntalPoster + '\n\nVil du vurdere disse poster?')) {


    for(i=0; elm.length>i; i++)
    {
        gid = elm[i].id; // hent id-data
        if( elm[i].type == 'checkbox' && elm[i].checked && gid.indexOf('gbook') > -1) // se om det er en G-post
        {
            gid = gid.split('*.*'); // split data
            tmp = '"' + gid[1] + '" skrevet af "' + gid[2] + '"'; // smid besked over i variablen "tmp"

            // husk at det er "window.confirm", ellers virker det ikke i FireFox.
            if (!window.confirm('Vil du slette G-posten?:\n\n' + tmp)) elm[i].checked = false;
        }
    }

} // end if

}
Avatar billede supermand69 Nybegynder
15. marts 2005 - 22:40 #13
hvordan skal man så afvikle funktionen i dit det første forslag?
Avatar billede supermand69 Nybegynder
15. marts 2005 - 22:43 #14
eller i det sidste forslag for den sags skyld :)
Avatar billede thesurfer Nybegynder
15. marts 2005 - 22:43 #15
Lige nu ser koden til Slet-knappen sådan ud (hos mig):

<input class="button" type="button" value="Slet" onclick="stat_g(this.form);  //this.form.action.value = 'delete'; this.form.submit()">
Avatar billede thesurfer Nybegynder
15. marts 2005 - 22:48 #16
Nu submitter den:

1) fjern onsubmit-koden fra din <form..>

2) tilføj linien efter "// end if":

} // end if
frm.action.value = 'delete'; frm.submit();

}

3) så ser koden til din Slet-knap sådan ud:

<input class="button" type="button" value="Slet" onclick="stat_g(this.form);">
Avatar billede supermand69 Nybegynder
16. marts 2005 - 17:58 #17
hvis der er markerede G-posts skal man trykke OK for at slette alle posts eller Cancel for at annullere :)
Avatar billede supermand69 Nybegynder
16. marts 2005 - 18:22 #18
hov... det jeg mente var at man ikke skal vurdere hver eneste, men hvis man vælger Cancel skal den kun slette de alm posts :) man skal heller ikke gøre det for avanceret for brugeren... heheh
Avatar billede supermand69 Nybegynder
16. marts 2005 - 18:50 #19
har forsøgt mig frem med noget her, men det virker ikke helt :( jeg har rettet en del i dit script som du nok også kan se, så jeg ved ikke om jeg har rodet for meget rundt i det... hehe...

det skal lige siges at alle mine funktioner ligger i en seperat JS fil :)

function guestbook_posts(frm)
{
    var elm = frm.elements;
    var num = 0;
    for(g=0; elm.length>g; g++)
    {
        var gid = elm[g].id;
        if(elm[g].type == 'checkbox' && elm[g].checked && gid.indexOf('G') > -1) num++;
    }
   
    if(num)
    {
        if(!window.confirm('Blandt de markerede posts er der '+num+' gæstebogs indlæg.\n\nVil du også slette disse?'))
        {
            for($i=0; elm.length>i; i++)
            {
                if(elm[i].type == 'checkbox' && elm[i].checked && gid.indexOf('G') > -1) elm[i].checked = false;
            }
        }
    }
   
    parent.document.frm.action.value = 'delete';
    parent.document.frm.submit()
}
Avatar billede supermand69 Nybegynder
16. marts 2005 - 18:58 #20
jeg her lige en lille ekstra ting...

hvordan definere jeg $_GET['tab'] i JS? den skal defineres i min fil med funktioner :)
Avatar billede thesurfer Nybegynder
17. marts 2005 - 01:10 #21
Dvs, ved klik på Slet-knappen, skal den undersøge om der er markeret G-poster. Hvis der er, skal den spørge om man vil slette dem. Hvis man vælger nej (Cancel), skal den fjerne hakkene i G-posterne, og kun slette de normale poster. Hvis man vælger Ja (OK), skal den bare fortsætte, og derved også slette G-posterne.
- Er det korrekt?

Ang "$_GET['tab']":
Da det er PHP kode, skal du inkludere PHP filen. Dvs, du skal højst sandsynligt udskrive din JavaScript kode, via PHP i en PHP fil, som du inkludere filen der kalder på funktionerne :-)

Eksempel:
- funktioner.php indeholder (husk: ingen "<script..></script>"!):
<?
echo "function mitkald(streng)"
echo "{"
echo "alert(streng);"
echo "}"
?>

- filen der kalder på funktionerne indeholder:

<script type="text/JavaScript" src="funktioner.php">
mitkald("hejsa");
</script>

Men da du skal have indholdet af "tab" med, skal det nok være noget i stil med:
src="funktioner.php?tab=<? echo $_GET['tab'] ?>"

og (funktioner.php filen):

<?
echo "tab = " . $_GET['tab'] . ";"
echo " "
echo " resten af JavaScript koden/funktionerne skrives her "
?>

Så kan du (i funkioner.php) henvise til tab variablen, og derved få fat på det, der stod i tab-variablen, i urlen.
Avatar billede roenving Novice
17. marts 2005 - 01:14 #22
$_GET-variabler kan da glimrende hentes i javascript, da de jo netop er angivet i urlen, og kan findes i location.search !-)
Avatar billede thesurfer Nybegynder
17. marts 2005 - 01:16 #23
hehehe.. jeg er totalt smaderet og halvsover.. godt at se, at der er nogen der er vågen.. for det er jeg vist ikke helt :-)
Avatar billede supermand69 Nybegynder
17. marts 2005 - 16:33 #24
thesurfer > ja, den skal gøre som du beskriver :)

hvordan definere man GET tab variablen i JS?
Avatar billede roenving Novice
17. marts 2005 - 17:41 #25
if(location.search){
  var tab = location.search.split("tab=")[1].split("&")[0];
}
Avatar billede supermand69 Nybegynder
17. marts 2005 - 17:58 #26
jeg kan så bare stadig ikke få min funktion til at virke :(

altså den første confirm virker fint, da man godt lave en cancel... men ved den næste confirm sletter den alle posts ligemeget om man trykker cancel :(
Avatar billede thesurfer Nybegynder
17. marts 2005 - 20:46 #27
1) Husk at JavaScript er case-sensitive, dvs "g" er forskellig fra "G".
2) Skriv lige den HTML-koden til dine checkbox (<input type...>)
Avatar billede supermand69 Nybegynder
17. marts 2005 - 21:02 #28
<input id="<?=$type?>" class="none" type="checkbox" name="post_id[]" value="<?=$value?>" onclick="change_background(this)">
Avatar billede supermand69 Nybegynder
17. marts 2005 - 21:05 #29
sådan ser min funktion ud på nuværende tidspunkt... confirmboksen hvor man vil vælge om G-posts skal slettes bliver ignoreret, for ligemeget hvad man gør bliver alle markerede posts slettet :(

function delete_posts(frm, tab)
{
    if(window.confirm('Du er ved at slette alle markerede posts.\n\nVil du fortsætte?'))
    {
        var elm = frm.elements;
        var num = 0;
       
        for(i=0; elm.length>i; i++)
        {
            if(elm[i].type == 'checkbox' && elm[i].checked && elm[i].id == 'G') num++;
        }
       
        if(num)
        {
            if(!window.confirm('Blandt de markerede posts er der '+num+' gæstebogs indlæg.\n\nVil du også slette disse?'))
            {
                for($i=0; elm.length>i; i++)
                {
                    if(elm[i].type == 'checkbox' && elm[i].id == 'G') elm[i].checked = false;
                }
            }
        }
    }
   
    frm.action.value = 'delete';
    frm.submit();
}
Avatar billede thesurfer Nybegynder
17. marts 2005 - 21:07 #30
Jeg går ud fra, at vis det er en G-post, vil "$type" indeholdet bogstavet "G" (stort bogstav)..?
Avatar billede thesurfer Nybegynder
17. marts 2005 - 21:08 #31
..det det er det eneste, det vil komme til at stå i id? (dvs ingen andre tegn)
Skriv HTML koden til en checkbox EFTER at siden er indlæst (dvs, afviklet PHP koden).
Avatar billede supermand69 Nybegynder
17. marts 2005 - 21:11 #32
ja... enten 'G' eller ingenting
Avatar billede supermand69 Nybegynder
17. marts 2005 - 21:12 #33
alt virker som det skal... altså hvis man har markeret nogle G-posts kommer den sidste prompt fint nok frem, men den bliver bare ignoreret...
Avatar billede thesurfer Nybegynder
17. marts 2005 - 21:13 #34
Måske er det fordi du både bruger "$i" (i "for($i=..") og "i" (resten af koden) ?:

                for($i=0; elm.length>i; i++)
                {
                    if(elm[i].type == 'checkbox' && elm[i].id == 'G') elm[i].checked = false;
                }
Avatar billede supermand69 Nybegynder
17. marts 2005 - 21:17 #35
hvordan ville du så lave koden?

for $i bliver jo nulstillet ved hver for :)
Avatar billede supermand69 Nybegynder
17. marts 2005 - 21:18 #36
hov..
Avatar billede thesurfer Nybegynder
17. marts 2005 - 21:18 #37
Du skal vel bruger samme variabel. Dvs enten med "$" eller uden "$". Lige nu blander du dem.
Avatar billede supermand69 Nybegynder
17. marts 2005 - 21:19 #38
nu virker det... jeg fattede ikke lige hvad du mente :) var lidt langsom
Avatar billede thesurfer Nybegynder
17. marts 2005 - 21:23 #39
Takker for points :-)
Avatar billede supermand69 Nybegynder
17. marts 2005 - 21:26 #40
ja, og tak for hjælpen :)
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