2016-04-01 18 views
5

Tôi có một dự án OpenCart nơi tôi đã sử dụng $('#some-id') cũng như jQuery('#some-id') được làm việc hoàn hảo, nhưng sau khi nâng cấp dự án 1,5-2,1, nó chỉ chấp nhận jQuery('#some-id') và ném lỗi cho $('#some-id') như

TypeError: $(...) is null

sau đây là một trong số trăm hàm ajax mẫu của tôi.

$('#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(); 
      } 
     }); 
    }); 

Có cách nào để cả hai hoạt động. Tôi không muốn lãng phí thời gian để thay thế $ bằng jQuery?

Sau đây là ảnh chụp lỗi trong bảng điều khiển firebug.

Nếu tôi thay đổi $('input[name=\'coupon\']')-jQuery('input[name=\'coupon\']') hơn nó di chuyển đến một số dòng khác, nơi $ được sử dụng. ví dụ như xem hình bên dưới.

next error after replacing $ with jQuery in above line.

Tôi đã cố gắng sử dụng mới nhất cũng như các phiên bản cũ của jQuery, nhưng vấn đề của tôi vẫn còn dai dẳng.

+0

Chắc chắn điều này là có thể, nhưng bạn cần chỉ định thêm chi tiết. 1. thông báo lỗi chính xác mà bạn nhận được và 2. cấu trúc tệp của bạn. – arkascha

+0

@arkascha, vui lòng xem pic lỗi đã tải lên. –

+0

Có điều gì đó ghi đè '$' sau khai báo jquery –

Trả lời

2

Vì bạn đã không bao gồm bất kỳ thông tin về mã của bạn đây chỉ là một gợi ý chung, nhưng có lẽ đáng lặn xuống cho bạn:

gì thường được thực hiện khi cố gắng để ngăn chặn các cuộc xung đột giữa các khuôn khổ JS và thư viện khác nhau (tất cả sử dụng các phím tắt $) được đóng gói thư viện hoặc mô-đun của riêng bạn mà cách:

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

bằng cách đó các định danh jQuery phải được quy định chỉ một lần, ngoài mã của riêng bạn, khi định nghĩa là "tự gọi" đảng ngay xa. Bên trong khối thư viện jQuery bây giờ được biết dưới lối tắt $ một lần nữa, nhưng nó không không va chạm với các tập quán khác của lối tắt đó bên ngoài mã đó chặn nữa.

Đây là tập hợp các gợi ý về chủ đề đó: https://api.jquery.com/jquery.noconflict/

+0

Tôi phải viết cái này ở đâu? –

+0

Bạn đóng gói mã của bạn bằng cách đó. Vì vậy, về cơ bản bạn ẩn tất cả các định nghĩa mã của bạn đi trong một hàm được thực hiện ngay lập tức với một đối số duy nhất: jQuery. Bằng cách đó bạn "tiêm" jQuery vào hàm gói, nơi nó được gọi là '$' một lần nữa. Các biến được định nghĩa bên trong phạm vi của một hàm không hiển thị trên toàn cầu. Đó là lý do tại sao bạn không có va chạm nữa nhưng vẫn có thể sử dụng '$' bên trong mã của bạn. – arkascha

+0

Có, đó là một chức năng xử lý sự kiện điển hình dựa trên thư viện jQuery.Như đã nói: bọc nó, để nó không được định nghĩa trong không gian tên chung nơi bạn có va chạm. Vấn đề với việc đó là gì? – arkascha

Các vấn đề liên quan