2015-05-27 44 views
3

我有一個複選框ID爲myopt,我有一個點擊事件處理程序如下;Chekbox點擊事件沒有被觸發檢查

$("#globalBody").on("click", "#myopt", function (event) { 
    if ($(this).prop("checked")) { 
     // do something 
    } else { 
     // do something 
    } 
}); 

現在在我的代碼,我做

$("#myopt").attr("checked",true); 

我的問題是不會觸發上述點擊事件處理程序。如果我手動點擊複選框,它會被調用。

問題是什麼?

回答

5

您需要使用.trigger()以編程調用單擊處理

執行附着在特定的事件類型匹配的元素的所有處理程序和行爲。

腳本

$("#myopt").prop("checked",true).trigger('click'); 

注:我會建議你使用change事件

$("#globalBody").on("change", "#myopt", function (event) { 
    if (this.checked) { 
     // do something 
    } else { 
     // do something 
    } 
}); 

//Change 
$("#myopt").prop("checked",true).trigger('change'); 
+3

使用變化而不是點擊的任何理由? – testndtv

+0

@testndtv,通過http://stackoverflow.com/questions/11205957/jquery-difference-between-change-and-click-event-of-checkbox – Satpal

+0

哦,是的...和上面的代碼實際上取消選中複選框! – testndtv

0

入住此琴,請https://jsfiddle.net/kwp7sjwf/2/

我有這取決於你兩個版本需要。據我瞭解,你想要的是點擊#globalBody內的某個地方,並檢查myopt複選框的狀態。在上面的小提琴中,我做到了這一點,但是我已經在評論中放置了一個代碼塊來處理第二個版本,在這種情況下,只有當myopt複選框狀態發生變化(直接點擊複選框)時纔會收聽。 希望它有幫助