Próbuję użyć wyboru bootstrap na starym projekcie, w którym nie jestem w stanie zmodyfikować starego kodu, po prostu dodając moje.
Ze względów wewnętrznych muszę użyć drugiej wersji jquery, a stary niech też działa, tak jak ja, mój kod wygląda mniej więcej tak:
console.log( "1st loaded jQuery version ($): " + $.fn.jquery );
$ocLazyLoad.load("http:somepath/jquery/jquery-3.1.1.min.js").then(function(response) {
$timeout(function() {
console.log( "2nd loaded jQuery version ($): " + $.fn.jquery );
var jq311 = jQuery.noConflict(true);
console.log( "After jQuery.noConflict(true)" );
console.log( "1st loaded jQuery version ($): " + $.fn.jquery);
console.log( "2nd loaded jQuery version (jq311): " + jq311.fn.jquery );
$(".selectpicker").selectpicker({
style:"form-control",
showTick:true
});
},0);
});
które zwracają ten dziennik:
1st loaded jQuery version ($): 2.1.4
2nd loaded jQuery version ($): 3.1.1
After jQuery.noConflict(true)
1st loaded jQuery version ($): 3.1.1
2nd loaded jQuery version (jq311): 3.1.1
TypeError: $(...).selectpicker is not a function
Co robię źle, nie mogę zmienić wersji jQuery? Dlaczego zwraca mi błąd "nie jest funkcją"? jak widać powyżej, ładowany jest przynajmniej jQuery
EDYCJA: Nie rozumiem, dlaczego pytanie jest przegłosowane ... może to odnosi się do nieklasycznego sposobu osiągnięcia celu, ale wciąż jest to uzasadnione pytanie
Odpowiedzi:
1 dla odpowiedzi № 1Twoim problemem wydaje się być ...
- Ładujesz plik źródłowy wtyczki "bootstrap-select" przed załadowałeś jQuery 3.1.1, i
- Próbujesz wykonać / bind / init tę wtyczkę za pomocą jQuery 2.1.4
Oto, co musisz zrobić (w kolejności) ...
- Dodaj jQuery 2.1.4 do dokumentu (upewnij się, że tak się stanie przed AngularJS jest wliczony w cenę)
- Dodaj dowolne stare pliki wtyczek. Będą one rejestrowane w 2.1.4
jQuery.fn
obiekt - Dodaj jQuery 3.1.1. To zastąpi
jQuery
i$
zmienne globalne - Dodaj wtyczkę "bootstrap-select". To zarejestruje się w 3.1.1
jQuery.fn
obiekt Przywróć jQuery 2.1.4 z
var jq311 = jQuery.noConflict(true)
Zainicjuj swoje
selectpicker
wtyczka / elementyjq311(".selectpicker").selectpicker(...)
Możesz zamienić # 5 i # 6 na tyle bezpiecznie, z wyjątkiem, że używałbyś tego $(".selectpicker")
zamiast jq311(".selectpicker")
.