2012-03-12 74 views
1

我有一個2級嵌套容器(見下文)。如何在特定條件下不執行jQuery函數

當我點擊.summary中的任何地方時,詳細信息就會顯示出來。當我檢查複選框時,我不希望顯示細節。所以我試着投入一些全局變量來控制slideToggle()。它適用於IE,但不適用於Firefox。

無論如何阻止slideToggle()執行每當你檢查框?它應該在所有其他時間執行。

* HTML *

<div class="summary"> 
    <div>Data 1</div> 
    <div>Data 2</div> 
    <div class="col_5"><input type="checkbox" /></div> 
</div> 
<div class="details">Detailed information</div> 

* JavaScript的*

$(document).ready(function(){ 

    var boxChecked = 'N'; 

    $('input:checkbox').change(function() { 

     $(this).closest('div.col_5').html('Yes'); 

     boxChecked = 'Y'; 

    }); 

    $('.summary').click(function(e){ 

     if (boxChecked == 'N') $(this).next('.details').slideToggle('slow'); 

     boxChecked = 'N'; 

    }); 

}); 

這幾乎就像。點擊()將執行優先OV er .change()在Firefox中。

回答

2

怎麼樣,簡單地說:

$(document).ready(function(){ 


    $('.summary').click(function(e){ 

     if ($("input:checked").length == 0) { 
      $(this).next('.details').slideToggle('slow'); 
     } 
    }); 

}); 

顯然,你將需要微調您:檢查選擇僅定位到所需的複選框(如果你在頁面上更多的複選框)。

+1

我試圖[在] j08691的第一,不能得到它的工作。所以我嘗試了這個第二個,並讓它按原樣工作。謝謝@Strelok! – 2012-03-12 02:52:19

1

試着這麼做:

$(document).ready(function() { 
    var boxChecked = false; 
    $('input:checkbox').change(function() { 
     $(this).closest('div.col_5').html('Yes'); 
     boxChecked = $(this).prop('checked'); 
    }); 
    $('.summary').click(function (e) { 
     if (boxChecked) { 
      $(this).next('.details').slideToggle('slow'); 
     } 
    }); 
}); 
3

這將是把一個名稱和ID在您的複選框是一個好主意,但使用你提供的代碼,你可以簡單地從像冒泡停止單擊事件:

$('input[type=checkbox]').click(function (event){ 
    event.stopPropagation(); 
}) 

jsFiddle example

1

你試過 $('input:checkbox').change(function(e) { e.preventDefault(); $(this).closest('div.col_5').html('Yes'); }

相關問題