2011-01-21 12 views
7

Interesujący problem z odziedziczonego kodu, który ostatnio obejrzałem. Próbuję dodać moduł kompresji do projektu. Ładuje wszystkie pliki JS i CSS, łącząc je, minimalizując i kompresując. Wypróbowałem wiele rozwiązań, ale wszystkie mają jeden fatalny problem.ASP.net: ClientScript.RegisterClientScriptBlock uruchamia się przed załadowaniem jQuery.

Mam trochę javascript, który jest ładowany za pośrednictwem Page.ClientScript.RegisterClientScriptBlock w PreRender na MasterPage. Moduł kompresji ładuje się jako łącze Tag skryptu na stronie MasterPage, ale kiedy uruchamiam stronę ... kod z PreRender jest obcinany i daje mi błąd "$ is undefined", mówiąc, że jQuery nie jest załadowane jeszcze.

Co więcej, nie mogę pozbyć się tego samego problemu, jeśli chodzi o wbudowany javascript na stronach treści.

Jakieś pomysły na przyczyny tego problemu? Oświeć mnie, bo nie mam pojęcia.

+0

jQuery nie jest przeznaczony do pracy przed pełnym załadowaniem modelu DOM. – Jake

Odpowiedz

9

Jeśli zrobiono to wcześniej z RegisterStartupScript (zamiast RegisterClientScriptBlock) i wywołałem $(document).ready(function() z WITHIN tego skryptu.

+0

Neat Solution.Mam ten sam problem z ToolkitScriptManager, skończyło się z włożonym skryptem PRZED plikami źródłowymi jquery . Sądzę, że ludzie używają ScriptManager na stronie wzorcowej, aby dołączyć jquery lub inne wymagane skrypty do swojej strony internetowej, może nawet używając CombineScripts lub CompositeScript z ToolkitScriptManager.Wydaje się bardzo dziwne, że RegisterClientScriptBlock wstawia swoje rzeczy PRZED ScriptReference od ScriptManager. –

0

Jeśli łącze do tagu skryptu, które rozszerza się do jquery, nie znajduje się w nagłówku, ale w treści strony, to wtedy $ będzie niezdefiniowane po wykonaniu bloku skryptu, chyba że jest zawarte w html przed otwarciem <form /> tag w renderowanym html, co rozumiem pod tym, że RegisterClientScriptBlock wypluwa swój skrypt (zaraz po tym otwierającym tagu).

Jeśli tak nie jest, a dołączony/minified skrypt znajduje się na głowie, użyłbym debugera przeglądarki, takiego jak Firebug lub IE Dev Tools, aby zweryfikować, czy skrypt jQuery jest poprawnie dołączony do połączonego scenariusz.

-1

Cały Twój kod jQuery powinny być napisane wewnątrz funkcji DOM-ready:

$(function() { 
    // your code here 
}); 

indipendently skąd go umieścić na stronie, bo funkcję jQuery() nie jest avalaible wcześniej.

+0

$ (document) .ready (function() {---> zgłasza błąd, ponieważ $ jest niezdefiniowane – jlrolin

+0

Może próbujesz skompresować minified wersję jQuery? W tym przypadku myślę, że może to spowodować pewne problemy .. .. – tanathos

+0

Hmmm .... Pozwól mi to sprawdzić – jlrolin

0

Wiem, że ta odpowiedź spóźnia się na imprezę, ale spróbuj zadzwonić pod numer ClientScript.RegisterClientScriptBlock w swoim OnPreRenderComplete (zamiast). Wstawia kod później w procesie renderowania strony.

Powiązane problemy