Avatar billede tommer Nybegynder
15. december 2004 - 14:06 Der er 38 kommentarer og
1 løsning

lave en confirm

Jeg har en side hvor der i pageload laves en js confirm. men hvordan styrer jeg om bruger har klikket på ok eller cancel??
Avatar billede nielsbrinch Nybegynder
15. december 2004 - 14:07 #1
dit confirm-kald returnerer true hvis der er klikket ok, og false hvis der er klikket cancel.
Avatar billede nielsbrinch Nybegynder
15. december 2004 - 14:08 #2
if (confirm('Er du sikkert'))
{
  alert('Du har klikket på ok');
}
else
{
  alert('Du har klikket på cancel');
}
Avatar billede tommer Nybegynder
15. december 2004 - 14:15 #3
det lyder ok, men så gør jeg vist lidt forkert....jeg gør sådan i pageload:divscript.InnerHtml="<script language=javascript>confirm('er du sikker?')</script>";
Avatar billede nielsbrinch Nybegynder
15. december 2004 - 14:20 #4
pageload:divscript.InnerHtml="<script language=javascript>if (confirm('er du sikker?')) udfoerEnMetode(); else udfoerEnAndenMetode();</script>";
Avatar billede tommer Nybegynder
15. december 2004 - 14:28 #5
Kan udfoerEnMetode()og udfoerEnAndenMetode() laves til være en metode i min codebehind??
Avatar billede nielsbrinch Nybegynder
15. december 2004 - 14:29 #6
Ikke uden videre.
Avatar billede tommer Nybegynder
15. december 2004 - 14:31 #7
Det har jeg brug for at det bliver....smider gerne lidt flere points hvis du kan forklare mig hvordan jeg så kan gøre.....
Avatar billede nielsbrinch Nybegynder
15. december 2004 - 14:44 #8
Indsæt dette hidden field lige under din Form:
<input type="hidden" name="perform" value="">

Indsæt følgende nederst på din side:
<script language=javascript>
function performMethod(method)
{
    document.Form1.perform.value = method;
    document.Form1.submit();
}
</script>

Indsæt dette som din nye pageload:

pageload:divscript.InnerHtml="<script language=javascript>if (confirm('er du sikker?')) perform("udfoerEnMetode") else perform("udfoerEnAndenMetode");</script>";

I din PageLoad i din CodeBehind kan du nu se hvad der er ved at blive udført, ved hjælp af Request.Form. F.eks. sådan:

if (Request.Form["perform"].Equals("udfoerEnMetode"))
{
  UdfoerEnMetode();
}
Avatar billede tommer Nybegynder
15. december 2004 - 15:30 #9
jeg får en:Object reference not set to an instance of an object
i denne linie:
Request.Form["perform"].Equals("udfoerEnMetode")
mystisk...min body er sgu da:
<BODY>
<FORM ID="Change" METHOD="post" RUNAT="server">
<INPUT TYPE="hidden" NAME="perform" VALUE="">
</FORM>
</BODY>
Avatar billede nielsbrinch Nybegynder
15. december 2004 - 15:34 #10
Kode til CodeBehind som virker:

string perform = "";
if (Request.Form["perform"] != null)
{
    perform = Request.Form["perform"];
}

if (!perform.Equals(""))
{
    switch (perform)
    {
        case "udFoerEnMetode":
                        UdfoerEnMetode()
            break;
        case "udFoerEnAndenMetode":
                        UdfoerEnAndenMetode()
            break;
        default:
                        EnHeltTredjeMetode()
            break;
        }
}
Avatar billede burningice Nybegynder
15. december 2004 - 18:57 #11
det var da en gang hack på hack :P

<asp:button id="knap" runat="server" OnClick="knap_Click" />

codebehind:

void Page_Load(object sender, EventArgs e) {
  knap.Attributes.Add("onClick", "java script: return confirm('Er du sikker');");
}

void knap_Click(object sender, EventArgs e) {
  // Din metode
}
Avatar billede burningice Nybegynder
15. december 2004 - 19:01 #12
blah... ja, jeg tror bare jeg smutte iseng igen :P :) havde set det som at det var en knap vi legede med.

ja, så er det vist umiddelbart den eneste måde at gøre det på... ikke nogen pæn måde, men også et lidt underligt scenario
Avatar billede tommer Nybegynder
15. december 2004 - 20:45 #13
det må du sørme undskylde cyberfessor....men hvad vil du gøre hvis du skulle:
sende bruger hen på en aspx side som med det samme skal vise en confirmbox hvor der sker noget (en metode i codebehindfilen) og bare en redirect hvis bruger vælger at klikke på cancel...(på forhånd tak)...
Avatar billede tommer Nybegynder
15. december 2004 - 20:52 #14
jeg får det heller til at virke.....
Avatar billede burningice Nybegynder
15. december 2004 - 21:37 #15
jeg ville nok ikke bruge en hel side på det... sådan et scenario er yderst sjældent, og ofte et tegn på at der er noget der er designet forkert.

Hvis det er fordi at brugeren f.eks. har mulighed for at slette/redigere en post, så lad confirm-boksen komme før at siden laver postback.

Hvis der absolut skal bruges en hel side til det, hvorfor så ikke bare hardcode dit javascript direkte? ingen grund til at skrive den ud via asp.net.
Avatar billede tommer Nybegynder
15. december 2004 - 21:40 #16
du siger:
"Hvis det er fordi at brugeren f.eks. har mulighed for at slette/redigere en post, så lad confirm-boksen komme før at siden laver postback."

det er vel også det nielsbrinch har gang i eller hvad ??
Avatar billede burningice Nybegynder
15. december 2004 - 22:09 #17
ææh... nej, det sådan et ekspempel jeg kom med... det var med en knap, det kan også gøres med et anchor
Avatar billede burningice Nybegynder
15. december 2004 - 22:10 #18
i nielsbrinch's tilfælde skal hele siden først indlæses, og derefter kommer der en confirm, og bagefter skal der postes igen... som oftest dobbeltarbejde
Avatar billede tommer Nybegynder
15. december 2004 - 22:11 #19
har lavet dette:

på aspx siden:
<SCRIPT LANGUAGE="javascript">
          function conf(){
          if (confirm('er du sikker?'))
            Change.perform.value="yes";
          else
            Change.perform.value="no";
        }
      </SCRIPT>

<FORM ID="Change" METHOD="post" RUNAT="server">
            <INPUT TYPE="hidden" ID="perform" NAME="perform" RUNAT="server">
            <DIV ID="divscript" RUNAT="server"></DIV>
            <DIV ID="divscript1" RUNAT="server"></DIV>
        </FORM>


pageload i codebehind:

    if(!Page.IsPostBack)
            {
                divscript.InnerHtml="<script language=javascript>conf();</script>";
                divscript1.InnerHtml="<script language=javascript>Change.submit();</script>";
               
            }
            else
            {
            divscript.Visible=false;
            divscript1.Visible=false;
            if(perform.Value.Equals("yes"))
                    Response.Write("Jepper");
                else
                    Response.Write("nada");
           
            }
Avatar billede tommer Nybegynder
15. december 2004 - 22:12 #20
det er sgu ikke kønt... ;-)
Avatar billede burningice Nybegynder
15. december 2004 - 22:16 #21
okay.. prøv istedet at beskrive hvilket formål det er til.. hvad det skal bruges til... hvad er scenariet... hvorfor kommer brugeren ind på denne side? hvor han han/hun være før?
Avatar billede burningice Nybegynder
15. december 2004 - 22:19 #22
btw.. så skal submit'en ske inde i din conf()-funktion, og ikke automatisk... og jeg tror heller ikke et javascript kan skrives ind i en div, det skal stå helt ude i roden. Du kan evt. skrive det ud med this.RegisterStartupScript() eller Response.Write()
Avatar billede tommer Nybegynder
15. december 2004 - 22:21 #23
det jeg har lavet virker fint. vil dog lige prøve this.RegisterStartupScript()  den kender jeg ikke (tak for din hjælp ;-))
Avatar billede tommer Nybegynder
15. december 2004 - 22:25 #24
scenariet er:

bruger får en mail hvor han kan klikke for at ændre en post i db'en.
hvis han siger ja på en confirm skal der redirectes til en side som siger "post er ændret", ellers redirectes til en side som siger "post ikke ændret".

de to side der redirectes ligger hos en anden host som jeg ikke har noget med at gøre, jeg skal bare ændre posten i db'en
Avatar billede burningice Nybegynder
15. december 2004 - 22:39 #25
okay... så ændringen sker helt automatisk?

well, for det første så, så kan du lige så godt skrive scriptet direkte på siden, inden grund til at bruge asp.net til det

<htm>
<head>

<SCRIPT LANGUAGE="javascript">
          function makeConfirm(){
          if (confirm('er du sikker?'))
            Change.perform.value="yes";
          else
            Change.perform.value="no";
        }

    getElementById("CHANGE").submit();
</SCRIPT>

</head>



<body onLoad="makeConfirm">



<FORM ID="Change" METHOD="post" RUNAT="server">
            <INPUT TYPE="hidden" ID="perform" NAME="perform" RUNAT="server">
</FORM>


</body>


pageload i codebehind:
   
void Page_Load(object sender, EventArgs e) {

string perf = Request.Form["perfom"];

if (perf == null) return;



if(perf.Value.Equals("yes"))
    Response.Write("Jepper");
        else
    Response.Write("nada");
}

}
Avatar billede burningice Nybegynder
15. december 2004 - 22:41 #26
det skal være

<body onLoad="makeConfirm();">
Avatar billede tommer Nybegynder
15. december 2004 - 22:48 #27
jeg får object expected fejl i denne linie:
getElementById("CHANGE").submit();
Avatar billede tommer Nybegynder
15. december 2004 - 22:51 #28
den kender jo heller ikke formen på det tidspunkt....eller hvad
Avatar billede burningice Nybegynder
15. december 2004 - 22:57 #29
hm.. det skulle den meget gerne...

prøv bare

        function makeConfirm(){
          if (confirm('er du sikker?')) {
            Change.perform.value="yes";
          } else {
            Change.perform.value="no";
          }
          Change.submit();
        }
Avatar billede tommer Nybegynder
15. december 2004 - 23:03 #30
Change is undefined fejl..
min form:
<form id="Change" method="post" runat="server">
<INPUT TYPE="hidden" ID="perform" NAME="perform" RUNAT="server">
</form>
Avatar billede burningice Nybegynder
15. december 2004 - 23:07 #31
:) blaah... jeg sover... stadig :(

function makeConfirm(){
          var theForm = document.getElementById('Change');

          if (confirm('er du sikker?')) {
            theForm.perform.value="yes";
          } else {
            theForm.perform.value="no";
          }
          theForm.submit();
        }
Avatar billede tommer Nybegynder
15. december 2004 - 23:13 #32
det tror jeg også du gør...nu bliver siden bare bare loadet igen uden postback og confirmbox kommer igen og igen....
Avatar billede burningice Nybegynder
15. december 2004 - 23:22 #33
ja... du bør lave en redirect istedet for response.write... ellers vi scriptet jo loade hver gang.. en anden mulighed er at sætte en placeholder omkring:

<asp:placeholder id="theScript" runat="server">

// dit script

</asp:placeholder>

void Page_Load(object sender, EventArgs e) {

string perf = Request.Form["perfom"];

if (perf == null) return;

theScript.Visible = false;

if(perf.Value.Equals("yes"))
    Response.Write("Jepper");
        else
    Response.Write("nada");
}

}
Avatar billede nielsbrinch Nybegynder
17. december 2004 - 11:08 #34
Cyberfessor, jeg fokuserer direkte på det konkrete spørgsmål. Oftest har folk en god grund til at stille netop det spørgsmål, selvom det virker som en underlig ting.
Avatar billede burningice Nybegynder
17. december 2004 - 13:41 #35
jo, men nu er det som oftes sådan, at der er nogle guidelines og måder man gør tingene på. Det er da rigtigt nok, at der nogle gange er nogle specielle behov som bliver nødt til at skulle løses med lidt hacking, men det er yderst sjældent tilfældet.

Hvis der så kommer en med et problem og hans/hendes mulige løsning på det, og man umiddelbart godt kan se at der er noget der virker besynderligt, så vil jeg da heller tage problemet helt ved roden og få det lavet ordenligt. Ja, der er oftest en god grund til netop hvorfor de har fået lavet det de nu har, og tit er det på grund af mangel af bedre. Sådan ved jeg da at jeg havde det i starten.

Når jeg kigger tilbage på nogle projekter jeg har lavet kan jeg da kun ryste på hovedet over den måde det er lavet på. Man udvikler sig, og efter at have arbejdet med asp.net i 2½ år lærer man nogle best praktises og optimale måder at gøre nogle bestemte ting på.

Det er ikke for at træde på nogen som helst, men har mange gange været ude for at et problem der egentlig er meget simpelt er gjort unødigt kompliceret fordi at det er grebet forkert an.
Avatar billede nielsbrinch Nybegynder
17. december 2004 - 13:44 #36
Enig.
Avatar billede tommer Nybegynder
17. december 2004 - 13:46 #37
det nå i sørme undskylde.....(vi er jo ikke alle supernørder)...
Avatar billede tommer Nybegynder
17. december 2004 - 13:47 #38
nå=må
Avatar billede burningice Nybegynder
17. december 2004 - 14:13 #39
tommer>> netop... det er jo derfo vi alle er her for at lære noget :)

men det sidste jeg har postet, 15/12-2004 23:22:26, det burde stoppe scriptet efter en postback
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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