Hej! Löste det själv...Problem att hitta ID för dynamiskt skapad kontroll
Jag håller på att bygga ett CMS för en site och har ett problem.
Jag använder mig av en span som har värdet Contenteditable satt till TRUE som texteditor eftersom jag vill ha en WYSIWYG hantering av texten.
Denna span tagg skapas dynamiskt och hamnar inom en placeholder som ligger inom en Contentplaceholder från en masterpage.
För att man ska kunna få ut innerHTML informationen från denna span måste man alltså kopiera detta när man submittar det form som finns på sidan. Nu är kanske detta mer ett Javascript problem men jag tror det mest handlar om att javascript koden inte får rätt ID för span taggen.
Koden som genererar span taggen ser ut som följer.
Dim editBox As New HtmlGenericControl
Dim lblText As New Literal
Dim p As New HtmlGenericControl
Dim btnSave, btnCancel As New Button
editBox.TagName = "div"
mainContentPh.Controls.Add(editBox)
Dim top As Integer = 0
If objReader2("class").ToString.Contains("ptop") Then top = 18
editBox.Controls.Add(selectBtn(CInt(objReader2("row").ToString), top))
If intRow.ToString IsNot Nothing Then
If intRow = CInt(objReader2("row").ToString) Then
editBox.Controls.Add(editList())
p.Style("background-color") = "#fea"
p.Attributes.Add("CONTENTEDITABLE", "true")
p.ID = "editArea"
btnSave.Text = "Spara"
btnSave.Style("float") = "right"
Form.Attributes.Add("onsubmit", "SaveMyText()")
Dim saveScript As New Literal
saveScript.Text = "<script type=""text/javascript"">" & vbCrLf & "function SaveMyText()" & vbCrLf & "{" & vbCrLf & "document.getElementById('" & source.ClientID & "').value = document.getElementById('" & p.ClientID & "').innerHtml;" & vbCrLf & "}" & vbCrLf & "</script>"
Master.styleSheets += saveScript.Text
btnCancel.Text = "Avbryt"
btnCancel.Style("float") = "right"
End If
End If
p.TagName = "span"
p.Attributes.Add("class", objReader2("class").ToString & " " & objReader2("imgAlign").ToString)
p.Style("display") = "block;"
lblText.Text = objReader2("rowValue").ToString & vbCrLf
p.Controls.Add(lblText)
editBox.Controls.Add(p)
If intRow.ToString IsNot Nothing Then
If intRow = CInt(objReader2("row").ToString) Then
editBox.Controls.Add(btnSave)
editBox.Controls.Add(btnCancel)
End If
End If
Nu innehåller koden lite "onödig" information men jag tror att ni förstår ändå. Det är även absolut inte den fullständiga koden, den är på över 400 rader i nuläget och innehåller mycket som inte har med detta att göra.
Såhär blir resultatet i javascriptkoden:
Source får ID: ctl00_cPHMain_source
medans p får: editAera
Vilket inte borde bli så. Det borde bli ctl00_cPHMain_editAera.
Någon som har någon idé varför det blir så?
Tacksam för alla funderingar och annat...
//Trinodia
Sv: Problem att hitta ID för dynamiskt skapad kontroll
Hämtade id innan jag hade lagt till kontrollen till sidan, klart inte ClientID blev något annat då.
//Trinodia