2016-01-08 14 views
6

Đi thẳng vào công việc kinh doanh:luận Pass tới một hàm callback trong trường hợp jquery nhấp chuột

Tôi có một jquery nghe sự kiện trông như thế này:

$(".number").click(printNumber); 

và một hàm callback:

function printNumber(number){ 
    console.log(number); 
} 

Tôi đã tự hỏi nếu tôi có thể vượt qua một đối số để gọi lại để nó trông giống như thế này

$(".number").click(printNumber(number)); 

(Tôi biết rằng nó ngay lập tức gọi hàm đó, nhưng vẫn còn, có cách nào để chuyển đối số cho nó)

Cảm ơn bạn trước!

Trả lời

9

Cách sạch để xử lý này là để trả về một hàm:

function printNumber(number) { 
    return function(e) { 
     console.log(number); 
    }; 
} 

Và sau đó sử dụng:

$(".number").click(printNumber(number)); 
7

Bạn có thể truyền dữ liệu để gọi lại trực tiếp như event.data trong jQuery

$(".number").on('click', {number : 4}, printNumber); 

function printNumber(event){ 
    console.log(event.data.number); // 4 
} 

Một cách khác là sử dụng bind

$(".number").click(printNumber.bind($, 4)); 

function printNumber(number, event){ 
    console.log(number); // 4 
} 

Nhưng điều đó cũng sẽ thay đổi callbacks this giá trị

+1

Trở chức năng là cách rõ ràng hơn. –

+0

@RobertMoskal - thông qua 'event.data' là cách jQuery'ish, đó là lý do tại sao nó có – adeneo

+0

Trong printNumber mã không rõ ràng rằng bạn có event.data.number, nhưng nó có thể hữu ích khi $ number.off ('bấm vào ', printNumber) –

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