2009-06-12 10 views
16

Mam kontrolkę ASP.Net, która wstrzykuje funkcję javascript pageLoad. Mam również funkcję pageLoad bezpośrednio na stronie. Nie mogę sprawić, by oboje strzelali. Czy ograniczasz się tylko do jednej funkcji o tej samej nazwie w javascript?ASP.Net AJAX multiple pageLoad functions possible?

Odpowiedz

33

Tak ... Podobnie jak w przypadku większości języków, JavaScript wymaga, aby symbole były niepowtarzalne w swoim zakresie. W JavaScript, jeśli tworzysz wiele definicji dla funkcji w danym zakresie, to ostatni, który ma być zdefiniowany "wygrywa" - będzie tak, jakby poprzednie definicje nigdy nie istniały.

Aby można było wykonać funkcję redundantną pageLoad, należy użyć metody Sys.Application.add_load(). Używając go, możesz dołączyć dowolną liczbę procedur obsługi do zdarzenia ładowania strony. Co więcej, możesz użyć anonimowej funkcji do dodania w metodzie add_load. Dzięki temu zagwarantujesz, że nie ma niebezpieczeństwa dla osób obsługujących duplikaty nazw. Przykład:

StringBuilder sb = new StringBuilder(); 
    sb.Append("Sys.Application.add_load("); 
    sb.Append("function() { alert('page load'); });"); 

ClientScript.RegisterStartupScript(this.GetType(), "Page_Load", sb.ToString(), true); 

jak łatwo można użyć Sys.Application.add_load po stronie klienta, można nawet dodać ten sam obsługi więcej niż jeden raz. Spowoduje to wypalenie tej samej funkcji wiele razy :)

-2

muszę się nie zgodzić z Shog9 ...

wiem, że to możliwe, aby mieć wiele $ (document) .ready (f (n)) wywołuje w jednym dokumencie, z których każdy jest zwany z kolei, gdy DOM kończy ładowanie. Nie wierzę, że wiele wywołań do ClientScript.RegisterStartupScript() również powoduje problemy.

+7

Josh, mówisz o jQuery, która obsługuje wiązanie wielu procedur obsługi do jednego zdarzenia. Mówi o wbudowanym automatycznym wiązaniu ASP.NET AJAX globalnej funkcji pageLoad. A ASP.NET AJAX obsługuje również wiele programów do obsługi pojedynczego zdarzenia, co nie zmienia faktu, że język bazowy nie obsługuje wielu funkcji o tej samej nazwie! – Shog9

+0

ahh dobry punkt! Brakowało mi tego w oryginalnym poście. Dzięki za poprawienie mnie w tym –