Avatar billede Slettet bruger
14. april 2008 - 17:36 Der er 13 kommentarer og
1 løsning

Form og javascript

Hej

Jeg har en textbox som der max må være 160 tegn i, for at holde styr på hvor mange tegn man har skrevet har jeg en anden textbox der tæller ned fra 160 hver gang man taster. Dette skulle så ske via javascript, men det virker ikke helt:

Først javascriptet:

function textCounter(field,cntfield,maxlimit) {
if (field.value.length > maxlimit)
field.value = field.value.substring(0, maxlimit);
else
cntfield.value = maxlimit - field.value.length;
}

asp.net:

<asp:TextBox ID="smsMsg" runat="server" Columns="40" maxLength="160" TextMode="MultiLine" Rows="5" onKeyDown="textCounter(document.myForm.smsMsg,document.myForm.charLeft,125)" onKeyUp="textCounter(document.myForm.smsMsg,document.myForm.charLeft,125)"></asp:TextBox>

<asp:TextBox ID="charLeft" name="charLeft" runat="server" Columns="3" ReadOnly="True" value="125"></asp:TextBox>

Problemet er at når onKeyDown bliver aktiveret siger den at document.myForm.smsMsg er null.

Er det fordi den form som asp.net bruger ikke virker, så man kun kan bruge den almindelige form ?

I form taget har jeg forsøgt at give den et id/navn:

<form id="myForm" name="myForm" runat="server">


Hilsen Michael
Avatar billede kalp Novice
14. april 2008 - 19:43 #1
<asp:TextBox ID="smsMsg" runat="server" Columns="40" maxLength="160" TextMode="MultiLine" Rows="5" onKeyDown="textCounter(document.getElementById('charLeft'),125)" onKeyUp="textCounter(document.getElementById('charLeft'),125)"></asp:TextBox>


men du mangler vidst stadig en parameter til din javascript funktion.. der sendes 2, men den forventer 3.
Avatar billede Slettet bruger
14. april 2008 - 22:00 #2
Det må jeg lige prøve i morgen, der sendes 3 og ikke 2, der er:

document.myForm.smsMsg
document.myForm.charLeft
125
Avatar billede kalp Novice
14. april 2008 - 22:03 #3
det har du ret i:)
men prøv, at hente dem via. document.getElementById('elementetsId')
Avatar billede Slettet bruger
15. april 2008 - 11:07 #4
Det virkede ikke, der står "et objekt var ventet" som om den slet ikke får fat i feltet??
Avatar billede mikalj Nybegynder
15. april 2008 - 11:55 #5
Hvis du kigger i den html kode som bliver genereret og sendt til browseren hedder felterne ikke længere smsMsg eller charLeft
men noget i stil af "ctl00_smsMsg" og "ctl00_charleft". Det er noget som asp.net gør for at sikre alle controls har et unik id. (dette sker kun ved asp.net controls, alle html elementer du skrive uden runat="server" bliver ikke "ændret" på denne måde, f.eks. <span id="blahblah"><span>, men de kan heller ikke tilgås fra codebehind.

Du kan tilgå en controls korrekte id via ClientID som er en property alle controls har.

dvs, inde i codebehind

smsMsg.Attributes.Add("onkeyup", string.Format("textCounter(this, document.getElementById('{}', 125);", charLeft.ClientID));
smsMsg.Attributes.Add("onkeydown", string.Format("textCounter(this, document.getElementById('{}', 125);", charLeft.ClientID));

Det skulle gerne resulterer i noget html som ser ud som følgende
<asp:TextBox ID="smsMsg" runat="server" Columns="40" maxLength="160" TextMode="MultiLine" Rows="5"
onKeyDown="textCounter(this, document.getElementById('ctl00_charLeft'), 125)"
onKeyUp="textCounter(this, document.getElementById('ctl00_charLeft'), 125)">
</asp:TextBox>

Du kan bruge "this" som en reference til textboxen selv så længe det foregår inde i dens egne attributer.

Noget helt andet er:
Jeg kan sådan set godt forstå du vil have en tæller på som viser hvor mange tegn der er tilbage. Men hvorfor ikke sætte MaxLength til 125 også, og lade den håndhæve grænsen.
Avatar billede mikalj Nybegynder
15. april 2008 - 11:56 #6
lille rettelse
der skal så 0 imellem tuborgklammerne i de to string.Format kald.
altså:

smsMsg.Attributes.Add("onkeyup", string.Format("textCounter(this, document.getElementById('{0}', 125);", charLeft.ClientID));
smsMsg.Attributes.Add("onkeydown", string.Format("textCounter(this, document.getElementById('{0}', 125);", charLeft.ClientID));
Avatar billede kalp Novice
15. april 2008 - 17:39 #7
det med nye id'er er kun hvis han benytter masterpages eller usercontrols..

men det kan jo være han lige netop gør det.
Avatar billede Slettet bruger
17. april 2008 - 12:33 #8
Jeg benytter masterpages, og kan godt se deres id ændre sig når siden bliver kørt. Er dog ikke sikker på hvor jeg skal indsætte?:

smsMsg.Attributes.Add("onkeyup", string.Format("textCounter(this, document.getElementById('{0}', 125);", charLeft.ClientID));
smsMsg.Attributes.Add("onkeydown", string.Format("textCounter(this, document.getElementById('{0}', 125);", charLeft.ClientID));

Når jeg indsætter den imellem <script runat="server"> og </script> kommer der fejl: CS1519: Invalid token '(' in class, struct, or interface member declaration

(Kører med koden inden i dokumentet)
Avatar billede kalp Novice
17. april 2008 - 15:37 #9
så er det nemmere direkte i din javascript kode at skrive

der hvor id'et skal indsættes..


f.eks

<script type="text/javascript">
document.getElementById('<%= smsMsg.ClientID %>');
</script>
Avatar billede mikalj Nybegynder
17. april 2008 - 17:03 #10
Det skal stå i Page_Load i codebehind filen Lehto.
Avatar billede Slettet bruger
18. april 2008 - 18:18 #11
Får fejlen "et objekt var ventet" Den laver id'et rigtigt når siden bliver kørt.


<script type="javascript" language="JavaScript">
function textCounter(field,cntfield,maxlimit) {;
if (field.value.length > maxlimit)
    field.value = field.value.substring(0, maxlimit);
else
    cntfield.value = maxlimit - field.value.length;
}
</script>

smsMsg.Attributes.Add("onkeyup", string.Format("textCounter(this, document.getElementById('{0}'), 125);", charLeft.ClientID));
smsMsg.Attributes.Add("onkeydown", string.Format("textCounter(this, document.getElementById('{0}'), 125);", charLeft.ClientID));

<asp:TextBox ID="smsMsg" runat="server" Columns="40" MaxLength="160" TextMode="MultiLine" Rows="5"></asp:TextBox>
Avatar billede Slettet bruger
18. april 2008 - 18:18 #12
<asp:TextBox name="charLeft" ID="charLeft" runat="server" Columns="3" ReadOnly="True"
        value="125"></asp:TextBox>


Kan du/i se nogen fejl.
Avatar billede mikalj Nybegynder
19. april 2008 - 03:07 #13
Der er ikke noget der hedder value på en textbox?
Avatar billede Slettet bruger
21. april 2008 - 10:13 #14
hmm den virker ellers som en value, altså viser værdien 125 i tekstboksen, men måske skulle jeg bruge text istedet for?
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
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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