2011-11-02 30 views
7

Tôi đang cố gắng đưa vào trang web của tôi tập lệnh Quicksand, nhưng tôi không thành công.
Firebug mang lại cho tôi lỗi này: 65 Uncaught TypeError: Cannot call method 'split' of undefined:
Loại không bắt buộcLỗi: Không thể gọi phương thức 'tách' không xác định

cho kịch bản này:

jQuery.noConflict(); 
jQuery(document).ready(function($){ 
    // Clone applications to get a second collection 
    var $data = $("#portfolio-items").clone(); 

    //NOTE: Only filter on the main portfolio page, not on the subcategory pages 
    $('#portfolio-terms ul li').click(function(e) { 
     $("ul li").removeClass("active"); 
     // Use the last category class as the category to filter by. This means that multiple categories are not supported (yet) 
     var filterClass=$(this).attr('class').split(' ').slice(-1)[0]; 
jquery.custom.js:65 Uncaught TypeError: Cannot call method 'split' of undefined (repeated 6 times) 

     if (filterClass == '.all current') { 
      var $filteredData = $data.find('#portfolio-'); 
     } else { 
      var $filteredData = $data.find('#portfolio-[data-type=' + filterClass + ']'); 
     } 
     $("#portfolio-items").quicksand($filteredData, { 
      duration: 800, 
      easing: 'swing', 
     });  
     $(this).addClass("active");    
     return false; 
    }); 
}); 


Xem ở đây: http://stakk.it/
lỗi là gì?

cảm ơn và xin lỗi vì tiếng anh xấu của tôi!

+0

Tại sao bạn sẽ nghĩ rằng filterClass thể có thể bình đẳng '.Tất cả current'? – Neil

Trả lời

18

Nếu .attr("class") lợi nhuận undefined, bạn không thể gọi .split vào nó vì .split là một phương pháp của đối tượng String và không thể được gọi vào undefined. Bạn cần lưu trữ kết quả của .attr("class") và sau đó chỉ chia kết quả nếu nó không phải là undefined.

var filterClass = $(this).attr('class'); 
filterClass = filterClass ? filterClass.split(' ').slice(-1)[0] : ''; 

bây giờ filterClass sẽ chứa những gì bạn mong đợi hoặc một chuỗi rỗng.

Chỉnh sửa: bạn có thể thay thế $(this).attr('class') bằng this.className, được lấy từ câu trả lời đã xóa.

+0

Cảm ơn bạn rất nhiều vì câu trả lời của bạn. Bây giờ tôi đã giải quyết được vấn đề nhưng tôi không hiểu tại sao hình ảnh lại biến mất. Bạn có thể xem tại đây: http://stakk.it/ – humanbeing

0

Một giải pháp khác là sử dụng phương pháp toString

var filterClass = $(this).attr('class').toString(); 
    filterClass = filterClass.split(' '); 

nó làm việc cho tôi

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