Avatar billede wolfgang Praktikant
21. marts 2007 - 09:00 Der er 14 kommentarer og
1 løsning

Div bredde til ASP værdi

Jeg skal finde en tekst-strengs længde i pixels og har fundet nedenstående løsningsmodel. Men jeg kan ikke få bragt værdien med videre i min asp kode.

'--> Finder bredde i pixels
<div style='padding:0px;position:absolute; visibility:hidden;' id='div_01'>Kalejdoskop</div>

'--> Udskriver værdien
<script language=javascript>
  document.write(document.getElementById('div_01').clientWidth)
</script>


Jeg ønsker at kunne bruge værdien i en asp variabel (eller lign.), på samme side.

Hvorledes skal dette gribes an?

Med venlig hilsen
Henrik
Avatar billede roenving Novice
21. marts 2007 - 09:12 #1
Sæt den som javascript-variabel og brug den onload !-)
Avatar billede wolfgang Praktikant
21. marts 2007 - 09:16 #2
Tak for dit indlæg.
Hmm... Den skal bruges i et ASP loop, så det vil ikke umiddelbart virke.
Avatar billede roenving Novice
21. marts 2007 - 09:22 #3
Men din asp afvikles jo på serveren, bredden kan du kun aflæse i klienten ...

-- evt. kan du jo sætte den som GET-variabel på et nyt kald til serveren, men det lyder ikke hensigtsmæssigt !-)
Avatar billede wolfgang Praktikant
21. marts 2007 - 09:28 #4
Det er et meget upraktisk ønske, jeg har fået :)

Jeg har tænkt lidt over følgende løsning.

1) Find bredde på div vha. ovenstående.
2) Send clientWidth via AJAX til en ASP, der ligger clientWidth i en ASP session, der så kan bruges af loopet efterfølgende
3) Denne session, vil så blive overskrevet og genbrugt ved et nyt kald.

Giver det mening?
Avatar billede roenving Novice
21. marts 2007 - 09:35 #5
Tjah, men du kan jo bare bruge javascript til at fange alle de elementer, du skal bruge variablen på !-)

F.eks.

<script type="text/javascript">
window.onload = function(){
  var kalWidth = document.getElementById('div_01').clientWidth;
  var elms = document.getElementsByTagName("div");
  for(i=0,im=elms.length;im>i;i++){
    if(elms[i].className.indexOf("kal")>=0)
      elms[i].style.width = kalWidth + "px";
  }
}
</script>

-- hvor jeg så tager fat i divs, der (bl.a.) har et classname, der er 'kal' !o]
Avatar billede roenving Novice
21. marts 2007 - 09:36 #6
-- og måske lidt sikrere:

    if(elms[i].className.match(/\bkal\b/))
Avatar billede wolfgang Praktikant
21. marts 2007 - 09:41 #7
Så er jeg ved at være sat af :)
Hvordan får jeg lagt disse værdier ind, hvor de skal bruges?

Jeg skal bruge værdien her:

Loop start
'--> cmString for Level 1
cmString = cmString & "oCMenu.makeMenu('top"&rsgetCategories_level1("Code")&"','','"&rsgetCategories_level1("Caption")&"','?c1="&rsgetCategories_level1("Code")&"','','!!BREDDE HER!!');" & vbCrLf
'--> cmString for Level 1
Loop End
Avatar billede roenving Novice
21. marts 2007 - 09:52 #8
Hvordan kommer de til at se ud i den endelige markup, når menuen er genereret ?-)

-- for så kan genereringen af menuen bare afsluttes med, at du sætter det på !-)

-- er det ikke coolmenu, du arbejder med, for så kan vi jo prøve os frem med id eller class !o]

Alle id'er i en sådan starter med oM (oMbbar, oMbbar_0, oM_m1_0, oM_m1, oM_cat_0, oM_cat osv.), alle klasser starter med menu på det overordnede plan (menu_dhtml, menuborder, menu), mens der på underordnede planer findes submenu og clCMAbs ...
Avatar billede wolfgang Praktikant
21. marts 2007 - 10:21 #9
Der er lige præcis CoolMenus jeg benytter.

Her egenskaberne for skidtet :)

'--> Items attributes: myCoolMenu.makeMenu(name, parent_name, text, link, target, width, height, regImage, overImage, regClass, overClass , align, rows, nolink, onclick, onmouseover, onmouseout)
Avatar billede wolfgang Praktikant
21. marts 2007 - 10:27 #10
Her er for en god ordens skyld, mit asp loop.

---- START ----
set rsgetCategories_level1 = conn.execute("select * from WebCategories where level=1 and Code in (select catlevel1 from WebCategoriesLink) order by Code asc")
               
if not rsgetCategories_level1.eof then
do while not rsgetCategories_level1.eof
                                       
'--> cmString for Level 1
cmString = cmString & "oCMenu.makeMenu('top"&rsgetCategories_level1("Code")&"','','"&rsgetCategories_level1("Caption")&"','?c1="&rsgetCategories_level1("Code")&"','','[Bredde]');" & vbCrLf
'--> cmString for Level 1

rsgetCategories.movenext
loop
Avatar billede roenving Novice
21. marts 2007 - 10:43 #11
-- jeg tror ved nærmere eftertanke, at du er nødt til at hente værdien fra browseren og så sende en request tilbage, for coolmenu beregner absolutte placeringer ...

-- altså sender du først et minimalt dokument, hvor du beregner bredden, og så omdirigerer til den rigtige side f.eks. med en get-parameter:

<html>
<head>
<title>Din sides titel</title>
<script type="text/javascript">
window.onload = function(){
  location.href = "?menuwidth=" + document.getElementById('div_01').clientWidth;
}
</script>
</head>
<body>
<div style='padding:0px;position:absolute; visibility:hidden;' id='div_01'>Kalejdoskop</div>
</body>
</html>

-- og så kan du sætte det ind i det rigtige dokument !-)
Avatar billede wolfgang Praktikant
21. marts 2007 - 14:16 #12
Jeg fik løst problemet på følgende måde

set rsgetCategories_level1 = conn.execute("select * from WebCategories where level=1 and Code in (select catlevel1 from WebCategoriesLink) order by Code asc")
       
            if not rsgetCategories_level1.eof then
                do while not rsgetCategories_level1.eof
                    Response.Write("<div style='padding:0px;position:absolute; visibility:hidden;' id=""CatId_"&rsgetCategories_level1("Code")&""">"&rsgetCategories_level1("Caption")&"</div>") & vbCrLf
                    response.Write("<script>") & vbCrLf
                        response.Write("var divWidth = document.getElementById(""CatId_"&rsgetCategories_level1("Code")&""").clientWidth;") & vbCrLf
                        response.Write("var myConn = new XHConn();") & vbCrLf
                        response.Write("if (!myConn) alert(""XMLHTTP not available. Try a newer/better browser."");") & vbCrLf
                        response.Write("var fnWhenDone = function (emptyfn) {  };") & vbCrLf
                        response.Write("myConn.connect(""_includes/ajaxActions.asp?ajaxAction=initCmMenu"" , ""POST"" , ""divID=CatId_"&rsgetCategories_level1("Code")&"&menuwidth=""+divWidth , fnWhenDone);") & vbCrLf
                    response.Write("</script>") & vbCrLf
                    rsgetCategories_level1.movenext
                loop
            end if
       
        rsgetCategories_level1.close
        set rsgetCategories_level1 = nothing

ajaxActions.asp?ajaxAction=initCmMenu opretter en session med bredden.

Vil du ikke oprette et svar, så du kan få points for din sparring.
Avatar billede roenving Novice
21. marts 2007 - 14:26 #13
Oki '-)
Avatar billede roenving Novice
21. marts 2007 - 14:36 #14
-- og tak for point ;~}
Avatar billede wolfgang Praktikant
21. marts 2007 - 14:51 #15
Velbekomme :)
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

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