2012-05-19 26 views
6

我有一個簡單的jQuery函數,允許用戶點擊表格行中的任何地方檢查/取消選中複選框的表格內的複選框列表。除非用戶實際點擊複選框,否則它效果很好。那麼它不起作用。有任何想法嗎?這裏是我的代碼:如何防止默認複選框事件覆蓋我的jQuery檢查/取消選中功能?

HTML:

<tr onClick="checkBox()">...</tr> 

的jQuery:

function checkBox() { 

var ischecked = $('input#myContacts').attr("checked"); 

if(ischecked) 
{ 
    $('input#myContacts').attr("checked", false); 
} 
else 
{ 
    $('input#myContacts').attr("checked", true); 
} 

return false; 
} 
+1

其中'#myContacts'複選框已放置?帖子詳細html –

+0

@約翰安德森:亞歷山大有一點;這裏有多個有效的解決方案。如果您需要進一步澄清,請詢問,否則接受答案。 – Grezzo

回答

8

您可以使用event.stopPropagation來避免您的input#myContacts的單擊事件傳播到tr的單擊事件。另外,我不能相信你正在以這種方式混合jQuery和DOM,當你應該使用jQuery Events時。

$(document).ready(function(){ 
    $("input#myContacts").click(function(e){ 
    e.stopPropagation(); 
    }); 
}); 
+0

另一個解決方案(使用較少的腳本)是僅在單擊標籤時觸發腳本,而不是包含複選框的整行。 – Grezzo

+0

非常感謝您的幫助!我是一個jQuery新手。 –

0

沒有說明爲什麼該功能被觸發通過很難說HTML。一個jsFiddle會很有幫助。只是猜測,但可能是你點擊複選框,它會檢查它,但點擊事件立即調用該函數取消選中它?

+0

我只是更新了代碼,以顯示如何從html內調用函數。 –

+0

你還沒有向我展示最重要的東西;您的複選框是否在之內。我敢肯定,這是你的問題。看到這裏檢查我是否有正確的想法:http://jsfiddle.net/qmdGK/。如果我這樣做,這正是我上面所說的,它正在滴答滴答,然後(由於你的腳本)在你看到它發生變化之前解開。您正在尋找的修復方法是將該點擊事件綁定到一個​​,其中包含您的複選框旁邊的​​旁邊的標籤,或停止上的點擊事件,直到。爲了防止冒泡:http://api.jquery.com/event.stopPropagation/ – Grezzo

+0

跑出人物......我會盡力讓解決方案的jsFiddles,但我即將遇到某人攀登一天,所以我現在沒有時間了。也許當我今晚(英國時間)回來的時候,如果你還沒有解決方案,我可以走了。 – Grezzo

0
<tr class="checkBox">...</tr> 


    $(document).ready(function() { 
     $('tr.checkBox').live('click', function (e) { 
      if (e.target.type !== 'checkbox') { 
       $('input#myContacts').attr("checked", function() { 
        return !$(this).prop('checked'); 
       }); 

       //Or 

       $(this).find('input#myContacts').attr("checked", function() { 
        return !$(this).prop('checked'); 
       }); 
      } 
     }); 
    }); 
相關問題