/ / TypeError: $ (...) .selectpicker nie jest funkcją z wieloma jQuery - jquery

TypeError: $ (...) .selectpicker nie jest funkcją z wieloma jQuery - jquery

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 № 1

Twoim problemem wydaje się być ...

  1. Ładujesz plik źródłowy wtyczki "bootstrap-select" przed załadowałeś jQuery 3.1.1, i
  2. Próbujesz wykonać / bind / init tę wtyczkę za pomocą jQuery 2.1.4

Oto, co musisz zrobić (w kolejności) ...

  1. Dodaj jQuery 2.1.4 do dokumentu (upewnij się, że tak się stanie przed AngularJS jest wliczony w cenę)
  2. Dodaj dowolne stare pliki wtyczek. Będą one rejestrowane w 2.1.4 jQuery.fn obiekt
  3. Dodaj jQuery 3.1.1. To zastąpi jQuery i $ zmienne globalne
  4. Dodaj wtyczkę "bootstrap-select". To zarejestruje się w 3.1.1 jQuery.fn obiekt
  5. Przywróć jQuery 2.1.4 z

    var jq311 = jQuery.noConflict(true)
    
  6. Zainicjuj swoje selectpicker wtyczka / elementy

    jq311(".selectpicker").selectpicker(...)
    

Możesz zamienić # 5 i # 6 na tyle bezpiecznie, z wyjątkiem, że używałbyś tego $(".selectpicker") zamiast jq311(".selectpicker").