2009-04-09 15 views
10

Problem jestem stoi to:połączeń zdarzenie onchange JavaScript programowo przez zmieniając wartość pola tekstowego

  • Mam pole tekstowe dla zakresu dat wzdłuż boku kontrolkę kalendarza.
  • Kiedy użytkownik wybiera datę z kalendarza, wypełnia, że ​​data w polu tekstowym
  • Kiedy to nastąpi chcę ognia funkcji javascript, jednak zdarzenie „onchange” nie wydają się zdarzyć.

bym idealnie lubią aby móc dodać wydarzenie jako atrybut do pola tekstowego, coś jak:

txtCreateDate.Attributes.Add("onchange", string.Format("JSfunction({0},'{1}');", arg1, arg2)); 

dzięki z góry

więcej info: Data jest wpisana do pola tekstowego wC#. Kontrolka kalendarza ma moduł obsługi zdarzenia na stronie. Po wybraniu daty moduł obsługi zdarzenia umieszcza datę w polu tekstowym. W tym momencie próbowałem ustawić fokus na pole tekstowe, a następnie wstawiłem atrybut onBlur w polu tekstowym, ale pole tekstowe nigdy nie wydaje się skupiać.

Przypuszczam, że mogłem bezpośrednio wywołać funkcję javascript w tym momencie, robiąc ClientScript.RegisterClientScriptBlock lub coś w tym stylu, ale wydaje się to niechlujne i nigdy nie działa tak, jak chcę.

Odpowiedz

7

Źle interpretujesz, co robi zdarzenie onchange po zastosowaniu do obszaru tekstowego. Nie zacznie strzelać, dopóki nie straci fokusa lub nie uderzysz w Enter. Dlaczego nie odpalić funkcji od zmiany w wyborze, który wypełnia pole tekstowe?

Sprawdź się tutaj bardziej na onChange imprezy: w3schools

2

Onchange jest uruchamiany tylko wtedy, gdy użytkownik wprowadzi coś za pomocą klawiatury. Umożliwiłoby to najpierw skupienie pola tekstowego, a następnie jego zmianę.

Ale dlaczego nie pobrać zdarzenia, gdy użytkownik kliknie datę? Musi być już jakiś javascript.

+0

Data jest ustawiona w txtbox przy użyciu C#, nie javascript. Próbowałem ustawić fokus na pole tekstowe w tym momencie i przy użyciu zdarzenia onBlur, ale pole tekstowe nigdy nie wydaje się prawidłowo ustawiać ostrość. –

+0

@ Matthew - To nie ma sensu. jeśli data jest ustawiona po stronie serwera, to jaki problem wywołałeś w zdarzeniu Onchange, jeśli jesteś już na serwerze w ramach funkcji? – TStamper

-4

W „onchange” jest zwolniony tylko wtedy, gdy atrybut jest programowo zmieniony lub gdy użytkownik wprowadza zmiany, a następnie skupia się z dala od pola.

Czy obejrzałeś obiekt kalendarza YUI? Zakodowałem rozwiązanie, które umieszcza kalendarz yui wewnątrz panelu yui i ukrywa panel, aż kliknięty zostanie powiązany obraz. Mogę zobaczyć zmiany z obu.

http://developer.yahoo.com/yui/examples/calendar/formtxt.html

+5

Zdarzenie onchange NIE zostanie uruchomione podczas zmiany wartości wejściowej programowo. –

7

można ognia zdarzenie po prostu z

 
document.getElementById("elementID").onchange(); 

nie wiem, czy to nie robi praca na niektórych przeglądarkach, ale powinien działać na FF i IE 7+ 3

+0

Potrzebuję zrobić to z C#, a nie javascript. –

+0

@ matthew_360: Nie można wywoływać/inicjować zdarzenia JavaScript z C#. – palswim

1

You populacja pochodzi z serwera. Użycie registerclientscript spowoduje wstawienie skryptu na początku formularza. Będziesz chciał użyć RegisterStartupScript (Block), aby skrypt został umieszczony na końcu danej strony.

Pierwsza próbuje uruchomić skrypt, zanim obszar tekstowy istnieje w domenie, drugi uruchomi skrypt po utworzeniu tego elementu na stronie.

18

To stara sprawa, i nie jestem pewien, czy to pomoże, ale byłem w stanie programowo ognia zdarzenie przy użyciu:

if (document.createEvent && ctrl.dispatchEvent) { 
    var evt = document.createEvent("HTMLEvents"); 
    evt.initEvent("change", true, true); 
    ctrl.dispatchEvent(evt); // for DOM-compliant browsers 
} else if (ctrl.fireEvent) { 
    ctrl.fireEvent("onchange"); // for IE 
} 
+1

Chociaż twój komentarz jest stary, zapisał mi dzisiaj dzień :) Dzięki! Jedna mała uwaga, odwróciłbym kolejność sprawdzeń, IE 9 obsługuje funkcję wysyłania, więc lepiej najpierw sprawdzić wersję zgodną z DOM i jeśli to się nie powiedzie, wrócić do trybu IE, to zmusi nowe przeglądarki (np. IE 9), aby użyć nowszych (i kompatybilnych) technik. – Gertjan

0

Można umieścić go w innej klasy i następnie wywołaj funkcję. Działa to po odświeżeniu ajaxu

Powiązane problemy