2012-04-26 38 views
6

Tôi đã tạo một kịch bản lệnh nhỏ và tôi có một vấn đề để sử dụng (điều này) trong một chức năng tùy chỉnh.jquery sử dụng (điều này) trong chức năng tùy chỉnh

Đây là mã:

jQuery("li").click(function() 
{ 
    var scrollTop = jQuery(window).scrollTop(); 
    if(scrollTop > 0) 
    { 
     jQuery('html, body').animate({ scrollTop: 0 }, 'slow', function() 
     { 
      fadeItems(); 
     }); 

    } 
    else 
    { 
     fadeItems();  
    } 

}); 

function fadeItems() 
{  
    var slogan = jQuery(this).children('p').html(); 

    jQuery('#slogan_text').fadeOut(150, function(){ 
     jQuery('#slogan_text').fadeIn(150).html(slogan); 
    }); 

    var content = jQuery(this).children('#post_content_large').html(); 
    jQuery('#content_view').html(content).hide(); 

    var status = jQuery("#readMore").html(); 

    if(status == 'Verbergen') 
    { 
     jQuery('#content_view').fadeIn(500, function(){ 
      jQuery('#content_view').fadeIn(500).html(content); 
     }); 
    } 

    var title = jQuery(this).children('h3').html(); 

    jQuery('#title_content').fadeOut(150, function(){ 
     jQuery('#title_content').fadeIn(150).html(title); 
    }); 
} 

Vì vậy, các chức năng chạy khi nhấp vào một mục danh sách và mà đi wel nhưng các giá trị của (this) là rỗng

Ai đó biết làm thế nào để sửa lỗi này?

Cảm ơn trước!

Trả lời

2

.call có thể hữu ích ở đây:

jQuery("li").click(function() { 
    var self = this; 
    var scrollTop = jQuery(window).scrollTop(); 
    if(scrollTop > 0) { 
     jQuery('html, body').animate({ scrollTop: 0 }, 'slow', function() { 
      fadeItems.call(self); 
     });  
    } 
    else { 
     fadeItems.call(self); 
    }  
}); 
+0

Cảm ơn (điều này) đã làm việc! :) –

2

Bởi vì bạn phải vượt qua nó để chức năng để nó có thể sử dụng nó (cũng có thể sử dụng domething khác nhau từ này, là ít gây nhầm lẫn (EDITED kể từ khi bạn muốn mục nhấp)

var clicked = this; 
    jQuery('html, body').animate({ scrollTop: 0 }, 'slow', function() 
    { 
     fadeItems(clicked); 
    }); 

function fadeItems(el) 
{  
var slogan = jQuery(el).children('p').html(); 
+0

'this' trong trường hợp đó không phải là yếu tố ông đang tìm kiếm. –

+0

@KevinB không đọc anh ta cần mục được gắn, sửa chữa –

2

Sử dụng apply:

fadeItems.apply(this);

Bằng cách đó bạn có thể xác định bối cảnh cho cuộc gọi chức năng (bằng tay gán giá trị của this trong fadeItems)

EDIT: như được ghi chú bởi @KevinB, bạn sẽ cần phải bí danh this trong hàm cha: var that = this;, và sau đó vượt qua that vào hàm, fadeItems.apply(that);.

+0

Điều đó làm việc tuyệt vời trong 'else {}', nhưng trong animate 'this' đề cập đến các phần tử' html' và 'body' –

+0

Ah, bắt tốt. Nguyên tắc là như nhau, nhưng bạn cần lưu trữ ngữ cảnh trong phạm vi gốc. – Mathletics

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