2016-04-01 13 views
5

Mam projekt OpenCart gdzie użyłem $('#some-id') jak również jQuery('#some-id') który działa idealnie, ale po uaktualnieniu projektu od 1,5 do 2,1, jej tylko z zaakceptowaniem jQuery('#some-id') i rzuca błąd na $('#some-id') jak

TypeError: $(...) is null

Poniżej znajduje się moja jedna z setek przykładowych funkcji ajax.

$('#button-coupon').on('click', function() { 
     $.ajax({ 
      url: 'index.php?route=total/coupon/coupon', 
      type: 'post', 

/*Here $ is not working jQuery works. Not just here, but in each line where $ is used its throwing error, untill & unless I replace it with jQuery.*/ 
      data: 'coupon=' + encodeURIComponent($('input[name=\'coupon\']').val()), 
      dataType: 'json', 
      success: function(json) { 
       $('.alert').remove(); 
      } 
     }); 
    }); 

Czy istnieje sposób, aby oba z nich zadziałały. Nie chcę tracić czasu na wymianę $ z jQuery?

Poniżej przedstawiono migawkę błędu w konsoli firebug.

Jeśli zmienię $('input[name=\'coupon\']') do jQuery('input[name=\'coupon\']') niż przenosi do innej linii, w której jest używany $. na przykład patrz poniżej obraz.

next error after replacing $ with jQuery in above line.

Próbowałem używać najnowszej, jak i stare wersje jQuery, ale mój problem nadal występuje.

+0

Z pewnością jest to możliwe, ale trzeba podać więcej szczegółów. 1. dokładny komunikat o błędzie i 2. struktura plików. – arkascha

+0

@arkascha, patrz przesłany obraz błędu. –

+0

Istnieje coś, co przesłania '$' po deklaracji jquery –

Odpowiedz

2

Ponieważ nie zawierają żadnych informacji o kodzie to tylko ogólna wskazówka, ale chyba warto pływać w dla Ciebie:

Co zwykle zrobić, gdy próbuje uniknąć konfliktów między różnymi ramami JS i biblioteki (wszystko używając skrótu $) jest do hermetyzacji własną bibliotekę lub moduły w ten sposób:

jQuery.noConflict(); 
(function($) { 
    // your library or modules here 
})(jQuery); 

ten sposób identyfikator jQuery musi być określony tylko raz, poza swoim własnym kodzie, gdy definicja jest „samo powołanie” sama prawda z dala. Wewnątrz tego bloku biblioteka jQuery jest teraz ponownie znana pod skrótem $, ale zderza się ona z innymi użytkownikami tego skrótu poza tym kodem poza tym blokiem kodu.

Jest to kompilacja wskazówki dotyczące tego tematu: https://api.jquery.com/jquery.noconflict/

+0

Gdzie mam to napisać? –

+0

Powodujesz enkapsulację swojego kodu przez to. Zasadniczo ukrywasz całą definicję kodu w funkcji, która jest wykonywana od razu z pojedynczym argumentem: jQuery. W ten sposób "wstrzykniesz" jQuery do funkcji owijania, gdzie znów jest nazywane '$'. Zmienne zdefiniowane wewnątrz zakresu funkcji nie są widoczne globalnie. Właśnie dlatego nie masz już kolizji, ale możesz nadal używać '$' w swoim kodzie. – arkascha

+0

Tak, jest to typowa funkcja obsługi zdarzeń oparta na bibliotece jQuery.Jak już wspomniano: owiń go tak, aby nie był zdefiniowany w globalnej przestrzeni nazw, w której masz kolizję. Jaki jest problem z robieniem tego? – arkascha

Powiązane problemy