Laden...

Sicherheitsabfrage bei Dropdownlist

Erstellt von Locust vor 17 Jahren Letzter Beitrag vor 17 Jahren 3.390 Views
L
Locust Themenstarter:in
21 Beiträge seit 2006
vor 17 Jahren
Sicherheitsabfrage bei Dropdownlist

Ich habe eine Dropdownliste, die mit 3 Einträgen gefüllt ist.
Wenn ich die Liste anklicke und einen der Einträge auswähle, soll eine Sicherheitsabfrage kommen, ob ich das auch wirklich auswählen will.
Bei normalen Buttons kann ich das ja über dieses Javascript machen:
JavaScript.confirm(btnÄndern, "Wirklich ändern?");
wenn ich das allerdings mit der DDL versuche,kommt wenn ich darauf klicke zwar die Abfrage, aber ich kann dann keinen Eintrag mehr auswählen, da sofort wenn ich den DDLPfeil drücke, die Abfrage aufgeht.
Gibt es ne Möglichkeit, dass die Abfrage erst kommt wenn der Eintrag ausgewählt wurde?
Oder dass ich nach der Abfrage auswählen kann. Die Reihenfolge ist also prinzipiell egal!

1.130 Beiträge seit 2005
vor 17 Jahren

Der Event, den Du suchst heißt "onChange".

http://de.selfhtml.org/javascript/sprache/eventhandler.htm#onchange

L
Locust Themenstarter:in
21 Beiträge seit 2006
vor 17 Jahren

Danke soweit schonmal
Jetzt kann ich einen Eintrag auswählen, mein Confirm Popup kommt auch, nur leider hat es keine Auswirkung, ob ich auf ja oder nein gehe, der ausgewählte Eintrag wird doch ausgeführt (Auf der ddl ist ein selectedIndexChanged!)
Der Code sieht für die Abfrage sieht jetzt so aus:

ddlAendern.Attributes.Add("onchange", "confirm('ändern?');");
W
799 Beiträge seit 2004
vor 17 Jahren

änder mal in

ddlAendern.Attributes.Add("onchange", "return confirm('ändern?');");

L
Locust Themenstarter:in
21 Beiträge seit 2006
vor 17 Jahren

jetzt kann ich munter ändern und es mir bestätigen lassen, nur wird so mein selectedIndexChanged nun ignoriert.

W
799 Beiträge seit 2004
vor 17 Jahren

Ja, ist eigentlich auch logisch - da das "Server-Event" natürlich das gleiche Clientevent benutzt. Schau mal in den generierten Code, wahrscheinlich steht da jetzt 2x "onchange=" drin.

Was mir auf die schnelle einfällt:

In OnPreRender den Inhalt auslesen, davor deinen JS-Code setzen, Attribut entfernen und neu hinzufügen. ABer keine Garantie, dass das klappt.

Alternativ halt einen Button neben die Selectbox setzen ... das funktioniert dann auch mit ausgeschaltetem JS.

1.130 Beiträge seit 2005
vor 17 Jahren

Original von Waschbecken
Ja, ist eigentlich auch logisch - da das "Server-Event" natürlich das gleiche Clientevent benutzt. Schau mal in den generierten Code, wahrscheinlich steht da jetzt 2x "onchange=" drin.

Ist eigentlich kein Problem. Das hinzugefügte Attribut wird einfach mit dem vorhandenen zusammengeführt.

@Locust:
Mit PostBack musst Du die Abfrage ein wenig anders gestalten:

ddl.Attributes.Add("onchange", "if(!confirm('sicher?'))return false;");
W
799 Beiträge seit 2004
vor 17 Jahren

Original von .Kai

Original von Waschbecken
Ja, ist eigentlich auch logisch - da das "Server-Event" natürlich das gleiche Clientevent benutzt. Schau mal in den generierten Code, wahrscheinlich steht da jetzt 2x "onchange=" drin.

Ist eigentlich kein Problem. Das hinzugefügte Attribut wird einfach mit dem vorhandenen zusammengeführt.

Ist das so? Wenn ja wäre es praktisch ... Locust, poste mal den generierten HTML-Code. Also den relevanten Teil.

Original von .Kai
@Locust:
Mit PostBack musst Du die Abfrage ein wenig anders gestalten:

ddl.Attributes.Add("onchange", "if(!confirm('sicher?'))return false;");  

ist genau das gleiche wie return confirm('sicher') 😁

L
Locust Themenstarter:in
21 Beiträge seit 2006
vor 17 Jahren

hmm, die idee mit dem Button hatte ich auch schon - wird es jetzt wohl auch werden, auch wenn es nicht gerade die eleganteste Lösung ist.
Trotzdem Danke für die Hilfe!
edit - oh, da kamen ja noch neue Antworten, gleich mal die Testen 😉

1.130 Beiträge seit 2005
vor 17 Jahren

Original von Waschbecken

Ist das so? Wenn ja wäre es praktisch ... Locust, poste mal den generierten HTML-Code. Also den relevanten Teil.

ja, hab es grade ausprobiert.

ddl.Attributes.Add("onchange", "if(!confirm('sicher?'))return false;");  

ist genau das gleiche wie return confirm('sicher') 😄

Nein, ist es nicht 😁
Wenn confirm == true ist, wird kein return zurückgegeben und somit auch die JavaScript Verarbeitung (sprich das PostBack) nicht abgebrochen.

L
Locust Themenstarter:in
21 Beiträge seit 2006
vor 17 Jahren

Super! Das ganze funktioniert!
Jetzt fällt mir nur noch ne Schönheitskorrektur ein:
Kann man es bewerkstelligen, dass beim Abbruch wieder auf den ursprünglichen Listeneintrag gesprungen wird?

Ansonsten wirklich schonmal 1000 Dank! tolles Forum!

1.130 Beiträge seit 2005
vor 17 Jahren

Klar, Du musst bei OnClick einfach den momentanen Index in einer Variablen auf der Seite speichern und dann wieder abrufen. Ist ein wenig aufwendiger, funktioniert aber.

W
799 Beiträge seit 2004
vor 17 Jahren

Original von .Kai
Nein, ist es nicht 😁
Wenn confirm == true ist, wird kein return zurückgegeben und somit auch die JavaScript Verarbeitung (sprich das PostBack) nicht abgebrochen.

Right.

W
799 Beiträge seit 2004
vor 17 Jahren

Original von Locust
Super! Das ganze funktioniert!
Jetzt fällt mir nur noch ne Schönheitskorrektur ein:
Kann man es bewerkstelligen, dass beim Abbruch wieder auf den ursprünglichen Listeneintrag gesprungen wird?

Speicher dir beim Aufruf der Seite den SelectedIndex in deine JavaScript-Variable

(Dirty/Pseudocode:

<script type="text/javascript">
var currentIndex = <%= MyDropDownList.SelectedValue %>;
</script>

Und für den Abbruch bei Confirm=false erstellst du dir noch ne JS-Funktion:

<script type="text/javascript">
function AbortSelection()
{
document.getElementById('<%= MyDropDownList.ClientID %>').selectedValue = currentIndex
}
</script>

So ungefähr.

L
Locust Themenstarter:in
21 Beiträge seit 2006
vor 17 Jahren

Die Lösung in deinem Blog funktioniert aber nur unter .Net 2.0 und höher oder?
In .NET 1.1 gibts System.Web.UI.WebControls.WebParts leider noch nicht...

1.130 Beiträge seit 2005
vor 17 Jahren

Nein, den Code könntest Du so auch in 1.1 verwenden. Lediglich die Zeile

ClientScript.RegisterStartupScript(this.GetType(), "ddlSelectedIndex", script, true);

muss geändert werden. Wenn Du möchtest, kann ich das Projekt heute Abend gerne auch noch mal für 1.1 erstellen.

L
Locust Themenstarter:in
21 Beiträge seit 2006
vor 17 Jahren

Darüber wäre ich sehr erfreut 😁

L
Locust Themenstarter:in
21 Beiträge seit 2006
vor 17 Jahren

wollte nur nochmal nett anfragen ob du das vielleicht noch machst 😉

1.130 Beiträge seit 2005
vor 17 Jahren

Mist, hab dich glatt vergessen. Ich schau mal was ich heute Abend machen kann....

1.130 Beiträge seit 2005
vor 17 Jahren