RadioButtonList löst SelectedIndexCharged nicht jedes Mal aus

9

Ich habe eine RadioButtonList mit den Optionen "Nicht anwendbar", "Nicht verfügbar", "Leave" und "Verfügbar".

  1. Ich werfe Bestätigungsmeldung bei Klick auf "Leave" in RadioButtonList von der Serverseite wie folgt

    %Vor%
  2. Wenn der Benutzer auf "Abbrechen" klickt, wird automatisch "Verfügbar" mit dem folgenden Code ausgewählt.

Folgendes ist der JavaScript-Code, um "Ok" oder "Abbrechen" zu verlassen.

%Vor%

Wenn der Benutzer zum zweiten Mal auf "Leave" klickt, wird SelectedIndexChanged überhaupt nicht ausgelöst.

Ich bin flexibel, Server-Side-Code auch auf die Client-Seite zu verschieben.

Aktualisieren

Das Folgende ist der relevante HTML-Code

%Vor%

Update 2

Ich stecke hier fest - ich muss darauf hinweisen. ClientID von RadioButtonList zu $ ​​das von jQuery. Das ist es. Da kann ich die 2. Antwort von @smoksnes

ausführen

Update 3

Wenn der Benutzer "Nicht verfügbar" oder "Verlassen" auswählt, sollte die Fehlermeldung "Möchten Sie Urlaub nehmen?" angezeigt werden. und wenn er "Abbrechen" auswählt, sollte die Auswahl von RadioButtonList auf "Verfügbar" hinweisen. Andernfalls sollte "Nicht verfügbar" oder "Leave" entsprechend gewählt werden.

    
CPK_2011 07.10.2016, 12:13
quelle

2 Antworten

2

Da Sie für die Idee offen sind, den Code stattdessen an den Client zu übertragen. Entferne das OnSelectedIndexChange auf deinem Radiobutton, um das Postback zu überspringen. Sie sollten stattdessen so etwas tun können:

%Vor%

Nachfolgend finden Sie ein Snippet, das IDs ohne Servercode verwendet.

%Vor% %Vor%

UPDATE: Ich habe das Skript auf den neuen HTML-Code aktualisiert. Hier binden wir das Ereignis stattdessen an die Montagesteuerung. Beachten Sie, dass Sie möglicherweise ein CssClass auf Ihrer Kontrolle statt ID zu verwenden. Dann können Sie dasselbe Skript für alle Ihre Steuerelemente verwenden (MyMonday, MyTuesday usw.). Es würde ungefähr so ​​aussehen:

%Vor%

Wenn dem so ist, sollten Sie in der Lage sein, das folgende Skript zu ändern:

%Vor%

Andernfalls müssen Sie die clientID verwenden.

%Vor%
  

Ich weiß nicht, warum onclick="javascript: setTimeout" hinzugefügt wird   das HTML

Das liegt daran, dass Sie Serversteuerelemente mit AutoPostBack für deine Radiobuttons. Entfernen Sie das und Sie sollten in Ordnung sein. Lesen Sie mehr dazu in diese Frage .

Im folgenden Ausschnitt habe ich mir die Freiheit genommen, den verschiedenen Radiobuttons CSS-Klassen zuzuordnen. Man wird bestimmen, wann das "check if leave" -Skript ausgeführt werden soll. Und eine ist, zu wissen, welcher Radiobutton auszuwählen ist, wenn der Benutzer sich entscheidet, zu bleiben. Die CSS-Klassen sind leave-check und select-if-not-leave . Sie können sie mit der Eigenschaft CssClass hinzufügen .

Sie können auch überprüfen, was HTML gerendert wird. Der von Ihnen angegebene HTML-Code verwendet table mit tr . Stellen Sie also sicher, dass die CSS-Klasse tatsächlich auf der input gerendert wird. Andernfalls müssen Sie den Wahlschalter anpassen.

%Vor% %Vor%

UPDATE 2:

  
  1. Wenn ich jQuery-Skript in Day UserControl schreibe, kann ich nur .leave- und .available-Klassen verwenden, aber nicht .day-control. 2. Wenn ich schreibe   das jQuery-Skript in UserControl, in dem MyMonday, MyTuesday, ...   MyFriday sind deklariert, dann kann ich nur .day-control verwenden, aber nicht .leave   und verfügbare Klassen. @smoksnes Bitte adressiere diese Mehrdeutigkeit.
  2.   

Wo Sie ein Skript haben, spielt keine Rolle, solange das Skript gleich aussieht. Vorzugsweise sollten Sie es zusammen mit Ihren anderen Skripten in eine js-Datei einfügen. Hier finden Sie ein paar Informationen dazu, wie das Skript und jQuery-Selektoren funktioniert:

Wenn Sie .day-control span.available input verwenden, sucht es zuerst nach einem Element mit der CSS-Klasse day-control , und ein Element, das ein span WITH css-class available und zuletzt ein input unter span ist. Wenn es mehrere Elemente gibt, die die Kriterien erfüllen, die ich gerade erwähnt habe, werden alle diese Elemente zurückgegeben. Dieses Skript sollte nur einmal gerendert werden , da es die Ereignisse für alle Ihre DayUserControl erfasst, da sie alle die gleiche CSS-Klasse day-control haben.

Wenn Sie jedoch #<%=this.ClientID%> span.leave input verwenden, wird zunächst nach dem Element mit der spezifischen ID gesucht ( this.ClientID ) und es sollte nur eine davon geben. Deshalb müssen Sie dieses spezielle Skript einmal für jedes DayUserControl rendern, da es für dieses spezielle Benutzersteuerelement eindeutig ist.

    
smoksnes 07.10.2016, 12:53
quelle
0

Übergeben Sie das Aufrufobjekt an die radconfirm-Funktion. ( Ссылка ).

Übergeben Sie Anruferobjekt vom Server protected void rdlUser_SelectedIndexChanged(object sender, EventArgs e) { //var oConfirm = radconfirm(text, callBackFn, oWidth, oHeight, callerObj, oTitle, imgUrl); radWindowManager.RadConfirm("Are you sure you want to take leave?", "confirmLeave", 300, 100, null, ""); }

Eine JavaScript-Funktion zum Überprüfen aller Steuerelemente in einer Liste.

function confirmLeave(arg) { if (arg == true) { alert("User has selected Leave.") }
else { //get callerid and validate var rdlUser = docment.getElementById("<%= rdlUser.ClientID %>"); var radioButtons = rdlUser.getElementsByTagName('input'); radioButtons[1].checked = true; } }

Ich habe Dokumentation verwiesen und ich habe diesen Code nicht getestet hoffe das hilft.

    
Praveen Kumar N 17.10.2016 06:18
quelle

Tags und Links