Mam aplikację na jQuery 1.5 z oknami dialogowymi działającymi dobrze. Chociaż mam wiele programów obsługujących .live, zmieniłem to na .on. W tym celu muszę zaktualizować jquery (teraz 1.8.3 i jquerui 1.9.1).
Teraz mam: Error: cannot call methods on dialog prior to initialization; attempted to call method 'close'
Poniżej znajduje się kod:
Javascript
var opt = {
autoOpen: false,
modal: true,
width: 550,
height:650,
title: 'Details'
};
$(document).ready(function() {
$("#divDialog").dialog(opt);
$("#divDialog").dialog("open");
...
Kod HTML
<div id="divDialog">
<div id="divInDialog"></div>
</div>
Masz jakiś pomysł, dlaczego tak się dzieje?
jquery
dialog
jquery-ui-dialog
core-chain.io
źródło
źródło
Jeśli nie możesz zaktualizować jQuery i otrzymujesz:
Możesz to obejść w następujący sposób:
Lub jeśli kontrolujesz widok i wiesz, że żadne inne okna dialogowe nie powinny być używane na całej stronie, możesz zrobić:
Poleciłbym to zrobić tylko wtedy, gdy używanie
closest
powoduje problemy z wydajnością. Prawdopodobnie istnieją inne sposoby obejścia tego problemu bez wykonywania globalnego zamknięcia wszystkich okien dialogowych.źródło
Otrzymałem ten błąd, gdy zaktualizowałem bibliotekę jquery tylko bez równoległej aktualizacji biblioteki jqueryui. Używałem jquery 1.8.3 z jqueryui 1.9.0. Jednak kiedy zaktualizowałem jQuery 1.8.3 do 1.9.1 otrzymałem powyższy błąd. Kiedy skomentowałem obraźliwe
.close
wiersze metody, wyrzuciłem błąd dotyczący nie znalezienia.browser
w bibliotece jquery, która była przestarzała w jquery 1.8.3 i usunięta z jquery 1.9.1. Zasadniczo więc biblioteka jquery 1.9.1 nie była kompatybilna z biblioteką jquery ui 1.9.0, mimo że strona pobierania jquery ui mówi, że działa z jquery 1.6+. Zasadniczo istnieją niezgłoszone błędy podczas próby użycia różnych wersji tych dwóch. Jeśli używasz wersji jquery, która jest dostarczana z pakietem do pobrania jqueryui, jestem pewien, że wszystko będzie dobrze, ale gdy zaczniesz używać różnych wersji, zboczysz z utartej ścieżki i otrzymasz takie błędy. Podsumowując, ten błąd pochodzi z źle dopasowanych wersji (w każdym razie w moim przypadku).źródło
Więc używasz tego:
a jeśli otworzysz widok częściowy MVC w oknie dialogowym, możesz utworzyć w indeksie ukryty przycisk i zdarzenie kliknięcia JQUERY:
następnie w widoku częściowym html wywołujesz przycisk wyzwalający kliknięcie, jak:
do zobaczenia.
źródło
Jeśli chcesz otworzyć okno dialogowe natychmiast po zainicjowaniu okna dialogowego lub po przygotowaniu strony, możesz również ustawić parametr
autoOpen
natrue
w obiekcie opcji okna dialogowego:Dlatego nie musisz wywoływać okna dialogowego `$ (" # divDialog "). (" Open ");
Po zainicjowaniu obiektu dialogowego okno dialogowe jest otwierane automatycznie.
źródło
Nowa wersja interfejsu użytkownika jQuery nie pozwala na wywoływanie metod interfejsu użytkownika w oknie dialogowym, które nie zostało zainicjowane. Aby obejść ten problem, możesz skorzystać z poniższego sprawdzenia, aby sprawdzić, czy okno dialogowe jest aktywne.
źródło
Jest to również obejście:
źródło
Po prostu musiałem dodać ScriptManager do strony. Problem rozwiązany.
źródło
W moim przypadku problem polegał na tym, że dzwoniłem
$("#divDialog").removeData();
w ramach resetowania danych formularzy w oknie dialogowym.Spowodowało to wymazanie nazwanej struktury danych,
uiDialog
co oznaczało konieczność ponownej inicjalizacji okna dialogowego.Zastąpiłem
.removeData()
bardziej konkretnymi kasowaniami i wszystko zaczęło znowu działać.źródło
Mój przypadek jest inny, zawodzi ze względu na zakres „ tego ”:
źródło
Otrzymałem ten komunikat o błędzie, ponieważ miałem znacznik DIV w widoku częściowym zamiast widoku nadrzędnego
źródło