2012-02-03 22 views
9

Tôi đang tạo một menu mở và đóng bằng jQuery. Trong thuật ngữ đơn giản, nó hoạt động như thế này:

function open_menu() { 
    $(this).next('ul.sub-menu').css('display', 'block').stop(true, false).animate({ 
     width: '235px', 
    }, 500); 
} 

function close_menu() { 
    // close code here 
} 

status = 'closed'; // set the default menu status 

$('a').click(function() { 
    switch(status) { 
     case 'closed': 
      open_menu(); 
      break; 
     case 'open': 
      close_menu(); 
      break; 
    } 
} 

Nhược bằng tôi lấy nội dung của open_menu() và đặt nó ở vị trí của open_menu() trong trường hợp .click(), mỗi công trình như mong đợi. Nếu tôi sử dụng mã như hiển thị ở trên, $(this) không thể tìm ra rằng .click() đã kích hoạt mã và mã không chạy.

Có điều gì mà tôi có thể làm để có bộ chọn $(this) thương lượng những gì đã kích hoạt trong khi vẫn giữ nó trong open_menu()?

Trả lời

15

Các this mà bạn đề cập đến trong open_menu là bối cảnh của open_menu chức năng, không phải là handler click vào liên kết. Bạn cần phải làm điều gì đó như sau:

open_menu(this); 

function open_menu(that) { 
    $(that).next(... 
2

Tại sao không chỉ truyền nó vào làm thông số?

function open_menu($this) { 
    $this.next('ul.sub-menu').css('display', 'block').stop(true, false).animate({ 
     width: '235px', 
    }, 500); 
} 

function close_menu() { 
    // close code here 
} 

status = 'closed'; // set the default menu status 

$('a').click(function() { 
    switch(status) { 
     case 'closed': 
      open_menu($(this)); 
      break; 
     case 'open': 
      close_menu(); 
      break; 
    } 
} 
+0

Tôi đã thử điều này, nhưng có thể tôi đã không thực hiện đúng cách. Tôi đã thêm 'test = $ (this);' ngay trước nút chuyển và truyền vào. Âm thanh phải không? – Combobreaker

+0

Làm cho nó hoạt động. Đã phải sử dụng 'this', không phải' $ (this) '. Cảm ơn. – Combobreaker

5

Bạn có thể sử dụng để đặt giá trị this trong hàm.

open_menu.apply(this) 
+0

+1 Trả lời câu hỏi ... * "Có điều gì mà tôi có thể làm để có bộ chọn' $ (this) 'này thương lượng những gì nó cháy trong khi vẫn giữ nó trong' open_menu() '" * –

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