ASP i JavaScript

0

Witam,

Na początku proszę o wyrozumiałość jako, że nigdy nie miałem do czynienia z ASP i javascriptem. Jest to mój pierwszy kontakt z tymi narzędziami i utknąłem już na samym początku. Mam problem z wywołaniem funkcji javascript z poziomu ASP. A właściwie nie z wywołaniem funkcji a przekazaniem danych.
Mam funkcję stopera w javascript i wywołując ją z poziomu ASP chcę aby na stronie włączał się stoper. Czyli Javacript przekazuje dane do ASP.
Udało się to zrobić na zwykłej stronie i wszystko działa tak jak założyłem, ale kiedy chcę to zrobić na stronie do której jest podpięty masterpage to już zmienna nie jest przekazywana.

W zewnętrznym pliku mam taki kod:

var msec = 0;
var sec = 0;
var min = 0;
var hour = 0;

function startwatch(phour, pmin, psec) {
if (phour > 0) {
hour = phour;
}

if (pmin > 0) {
    min = pmin;
}

if (psec > 0) {
    sec = psec;
}

** var hdntime = document.form1.clock;**
hdntime.value = hour + ":" + min + ":" + sec;
go = setTimeout("startwatch()", 1);
msec++;
if (msec == 200) {
msec = 0;
sec++;
}
if (sec == 60) {
sec = 0;
min++;
}
if (min == 60) {
min == 0;
hour++;
}
}

Problem jest z przekazywaniem danych var hdntime = document.form1.clock;
Na zwykłej stronie mam znaczniki <form> natomiast na stronie bazującej na masterpage takich znaczników nie mam a wszystko jest ograniczone przez:
<asp:Content ID="clockform" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">

tutaj ma być przekazana wartość:
**<input name="clock" style="font-size: small; font-weight: bold; height: 35px; text-align: center; width: 174px;" value="00:00:00.00" /> **

jak prawidłowo odczytywać/zapisywać do zmiennej hdntime?

0

Jeśli sądzisz, że setTimeout ma rozdzielczość 1ms, to się poważnie zdziwisz.
Jeśli sądzisz, że 200ms to 1s, to też się poważnie zdziwisz.
Jeśli sądzisz, że 60 * 1s w setTimeout faktycznie 1 minuta, to kolejny raz się zdziwisz.
Nie tak realizuje się odmierzanie czasu w js. Powinieneś na starcie zapamiętać bieżący czas, a w setInterval (z okresem rzędu 50-100ms) pobierać czas i po odjęciu go od zapamiętanego czasu gdzieś tam go wyświetlać.

0

W tym momencie chodzi mi tylko o wyświetlenie tego na stronie. Później będę analizował poprawność liczenia.
Moje pytanie tyczyło się jak przesyłać dane z js do asp.

2

Na pierwszy rzut oka zapisywanie do kontroli wygląda poprawnie. Użyj firebuga albo podobnego narzędzia i podejrzyj w konsoli błędów js co się sypie i potem to popraw. Może pomoże var hdnTime = document.getElementsByName("clock")[0];, ale wątpię, pewnie problem w tym, że WebFormsy lubią zmieniać id i name kontrolek na swoje własne śmieci i do odwołań przez document.getElementById() trzeba używać <%= kontrolka.CliendID %>, które nie jest dostępne w statycznych plikach js.
Przeczytałem jeszcze raz Twojego posta i nadal nie jestem pewien, o co chodzi. Do asp z js nie możesz bezpośrednio przesłać danych, musisz to robić przez ajax (czyli zrobić request do serwera do odpowiedniego pliku aspx). Jeśli chodzi o wymianę danych między js a html generowanym przez aspx, to tak jak wyżej opisałem - znajdujesz w js właściwą kontrolkę (najlepiej po id - document.getElementById, ewentualnie po name, w najgorszym przypadku tak jak to robisz obecnie), potem przypisujesz coś do którejś z właściwości kontrolki. Jeśli coś nie działa, to użyj konsoli js, która wyświetli treść błędu lub/oraz użyj alertów/console.log żeby sprawdzić, co za dane powodują błąd, albo po prostu użyj debugera wbudowanego w każdą sensowną przeglądarkę.

PS Zgaduję, że hdntime ma wartość undefined i to powoduje Twój problem. Dzieje się tak, bo kontrolka, której szukasz, nie została znaleziona, a to dlatego, że odwołujesz się do nieistniejącej "ścieżki".

0

Dzięki za odpowiedź. Faktycznie był zmieniony id kontrolki. Podpowiedź z debugowaniem w przeglądarce bezcenna :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1