Sind versteckte Felder im untergeordneten Fenster, das aus dem übergeordneten Fenster nicht zugänglich ist

StackOverflow https://stackoverflow.com/questions/199127

  •  11-07-2019
  •  | 
  •  

Frage

Ich habe ASP.NET -Formular, das Felder enthält. Wenn ich auf dieses Fenster zugreife, können meine JavaScript -Funktionen mit der GetElementById () -Methode über die DOM auf die Felder zugreifen. Wenn ich auf den Server nachverpackt, erhalte ich die vom Client erstellten Aktualisierungen.

Wenn ich das Formular jedoch als Kinderfenster mit der Radwindow -Steuerung von Telerik starte, kann das JavaScript nicht auf die versteckten Felder des Kinderformulars zugreifen. Stattdessen bekomme ich Null.

Meine Fragen sind:

  1. Sind versteckte Felder in einem untergeordneten Fenster nicht zugänglich, wenn das Fenster von einem übergeordneten ASP.NET -Formular gestartet wird?
  2. Hat jemand dies mit Telerik -Kontrollen versucht und auf Probleme gestoßen?

BEARBEITENCraig wies darauf hin, dass die ID unterschiedlich sein kann. Zwei zusätzliche Fragen dann:

  1. Können Sie sicherstellen, dass die auf dem Server zugewiesene ID tatsächlich verwendet wird?
  2. Ist die Verwendung von GetelementByName () ein besserer Mechanismus zum Zugang zu DOM -Elementen?
War es hilfreich?

Lösung

Um die ID Ihres ASP.NET -Steuerelements zu erhalten, tun Sie so etwas:

<%= theControl.ClientID %>

GetElementByName wird nicht so häufig verwendet wie GetElementById. Das ID -Attribut soll für jedes Element auf der Seite eindeutig sein, während das Namensattribut dupliziert werden kann.

Andere Tipps

Es ist durchaus möglich, dass die ID des Elements nicht das ist, was Sie denken. Überprüfen Sie die gerenderte Seite und prüfen Sie, ob die ID vorhanden ist. Ich vermute, dass die Seite eine andere ID erhalten, da sie innerhalb einer anderen Kontrolle gerendert wird.

Wenn dies der Fall ist, können Sie das Formular ein Skript machen, das die Element -ID zurückgibt, indem Sie auf die Client -ID der Steuerung zugreifen.

David, ich sende Ihnen diese Antwort, weil ich das gleiche Problem in meinem Code gesehen habe, und die einzige wirkliche Lösung, die ich fand, war, dass ich die "Onclick" -Funktion an zwei Stellen unterstützen musste ... in meinem Fall benutzte ich Petersdatepackage, aber es war auf einem Telerik -Radstreifen.

In meinem Fall befand sich die Kontrolle auf einer .ascx -Seite, und der JS -Code war wie folgt:

function OnIncidentDateChange(ctrl, dtDate, bErr)
{
    var weekday = new Array(7);
    weekday[0] = "Sunday";
    weekday[1] = "Monday";
    weekday[2] = "Tuesday";
    weekday[3] = "Wednesday";
    weekday[4] = "Thursday";
    weekday[5] = "Friday";
    weekday[6] = "Saturday";

    <%=LabelDayOfWeek.ClientID %>.innerText = weekday[dtDate.getDay()];
}

Aber das selbst war nicht genug. Ich musste diesen Code meiner übergeordneten Seite hinzufügen. Die Seite, die die Steuerelemente für den Telerik -Streifen enthält.

// Dummy function?
function OnIncidentDateChange()
{
}

Sobald ich das getan habe, hat es funktioniert ...

Ich bin mir nicht sicher, warum, um Ihnen die Wahrheit zu sagen, und es macht für mich keinen Sinn und kann nur ein Problem mit dem PDP -Paket sein ...

Ich verwende GetElementsByName für Kontrollkästchen in derselben Gruppe.

Was die ID des Kontrolls angeht, hat Tonyb die richtige Idee, aber stellen Sie sicher, dass Sie sich auf die ClientID -Eigenschaft im Prerender -Event -Handler beziehen. Wenn Sie dies zu früh im Seitenlebenszyklus tun, wird dies noch nicht verfügbar sein.

Ist es möglich, dass JavaScript versucht, einen Verweis auf das versteckte Feld zu erhalten, bevor der Radwindow es geladen hat? Ich glaube, ich bin schon einmal darauf getroffen und musste SetTimeout verwenden, um das Problem zu umgehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top