2011-09-28 36 views
6

Tôi đang tìm kiếm một cách để vô hiệu hóa một .toggle() gắn liền với một divvô hiệu hóa một phương pháp jQuery .toggle()

if (condition) { 
    $("#div").toggle(
     function() { 
      do this 
     }, 
     function() { 
      do that 
     } 
    ); 
} 
else { 

    // How do I achieve this? 
    $("#div").disableToggle(

    ); 
} 

More giải thích:

Đây là một ứng dụng bản đồ. Các toggle trong câu hỏi là ràng buộc với một nút hình ảnh. Bản đồ tải ở mức thu phóng 4. Người dùng phóng to và nút đang được đề cập sẽ chỉ hoạt động khi người dùng được phóng to hơn mức thu phóng 6. Khi người dùng thu nhỏ xuống dưới mức 6, tôi muốn nút chuyển đổi thành trở nên không hoạt động trở lại.

+0

Cách tốt nhất là để unbind 'cái sự kiện click' rằng chuyển đổi thêm. Tôi đã đăng câu trả lời, nhưng tôi đã hết thời gian rồi. –

+0

Có thể bạn không nên sử dụng nút chuyển đổi() trong trường hợp này; toggle() sử dụng bộ đếm nội bộ và rất có khả năng bị bẻ khóa nếu bạn thử bật và tắt nó. – Kato

+0

Nó không phải là tôi đang cố gắng để tắt 'toggle()' off. Nó giống như tôi muốn vô hiệu hóa nó trên một số điều kiện. Ứng dụng phụ thuộc vào mức thu phóng bản đồ nhất định. Chỉ ở mức thu phóng chính xác thì nút chuyển đổi sẽ hoạt động. Khi người dùng di chuyển ra khỏi phạm vi zoom, chuyển đổi sẽ tắt. – punkish

Trả lời

6

Tại sao không chỉ unbind các nhấp chuột?

$('#div').unbind('click'); 
+0

'toggle' không phải là một sự kiện hay một trình xử lý sự kiện. –

+1

Vì vậy, tôi vừa mới phát hiện ra. Bỏ ràng buộc sự kiện bấm có vẻ hoạt động. http://jsfiddle.net/finbarr/gePha/ – Finbarr

+0

chính xác như bình luận đầu tiên của tôi về câu hỏi của OP nói;) ~~ "Cách tốt nhất là để unbind các sự kiện nhấp chuột mà chuyển đổi thêm. Tôi muốn gửi một câu trả lời, nhưng tôi ra khỏi thời gian ngay bây giờ ". Câu trả lời tôi hiện không có thời gian để đăng bài (Tôi đang ở nơi làm việc) đang được đặc biệt chỉ cần loại bỏ xử lý sự kiện cụ thể đó. Câu trả lời của bạn sẽ xóa tất cả chúng. Đối với nhiều dự án, phương pháp draconian như vậy là tốt mặc dù, vì vậy tôi lên bình chọn câu trả lời của bạn. Tôi sẽ thêm một cảnh báo cho nó mặc dù chỉ ra rằng điều này sẽ loại bỏ * tất cả * bấm xử lý. –

3

Bạn có thể đặt condition bên trong của hàm:

$("#div").toggle(
    function() { 
     if (condition) { 
      //do this 
     } 
    }, 
    function() { 
     if (condition) { 
      //do that 
     } 
    } 
); 
1

Nếu bạn không đi qua các chức năng ẩn danh để toggle(), bạn có thể sử dụng kỹ thuật này được mô tả on this forum post để unbind các sự kiện.

+0

thật đáng buồn, nó không hoạt động. Nó kích hoạt chuyển đổi, nhưng unbind không xảy ra. – punkish

3

Bạn có thể sử dụng .cleanData():

// this will destroy all data bound to that element 
$.cleanData($("#div")); 

Demo.

+0

Mã demo của bạn dường như không làm gì cả. Ngoài ra, cú pháp đó nghĩa là gì? –

+0

@Ben Lee - nhận xét câu lệnh cuối cùng và nhấp vào các div sẽ hoạt động trở lại. Nó giết 'toggle()'. – karim79

+0

CleanData có được ghi lại ở bất kỳ đâu không? Tôi đang googling nó, nhưng tôi không thể tìm thấy một trang giải thích những gì nó phải làm. –

2

Đây là một cách:

Tháo lớp đó được chọn để thay đổi. Fiddle ở đây: http://jsfiddle.net/leifparker/rSP34/2/

HTML

<div class="button_toToggle"> Toggle it! </div> 
<div class="button_disableToggle"> Disable Toggle </div> 
<div class="happyDiv togglable">&nbsp;</div> 

JS

$('.button_toToggle').click(function(){ 
    $('.togglable').toggle(); 
}); 
$('.button_disableToggle').click(function(){ 
    $('.happyDiv').removeClass('togglable'); 
}); 
Các vấn đề liên quan