2014-03-19 93 views
0

我在標籤內有複選框。當複選框被選中時,我需要標籤有一個類,但當它沒有時,不需要。我這個manged它:在點擊和頁面加載時運行功能?

$('label').click(function(){ 
    if ($('input[type=checkbox]', this).is(':checked')) { 
    $(this).addClass('checked'); 
    } else { 
     $(this).removeClass('checked'); 
    } 
    }); 

但是在頁面加載時,如果一個複選框被選中可是沒有階級,因爲處理不當代碼尚未運行的標籤。

我喜歡把代碼放在一個函數中,然後調用它,但是下面的代碼不工作。我的代碼示例都已包裝在DOM中。

function checkFunc(){ 
    if ($('input[type=checkbox]').is(':checked')) { 
     $(this).parent('label').addClass('checked'); 
    } else { 
     $(this).parent('label').removeClass('checked'); 
    } 
    } 

    checkFunc(); 
    $('label').click(checkFunc); 

我有語法錯誤,或者是我的代碼有根本錯誤嗎?

UPDATE香港專業教育學院試過如下:

function checkFunc(){ 
    if ($('input[type=checkbox]', this).is(':checked')) { 
     $(this).parent('label').addClass('checked'); 
    } else { 
     $(this).parent('label', this).removeClass('checked'); 
    } 
    } 

    $('label').each(checkFunc).click(checkFunc); 
+1

當你用'checkFunc()'調用函數時,那麼'this'指的是'window',而不是'label'元素。 –

+0

您可以將'this'作爲參數傳遞給函數^ –

回答

2

當你調用與checkFunc()的功能,那麼[thiswindow] 1,而不是一個label元素。

它看起來像你想運行每個標籤元素的功能,所以使用.each代替:而不是創建一個名爲

$('label') 
    .each(checkFunc) 
    .click(checkFunc); 

但你也可以簡單地裝配工的Click事件處理程序中的約束後,函數:

$('label').click(function(){ 
    // ... 
}).triggerHandler('click'); 
+0

我試圖實現您的代碼,請參閱我對問題的更新。 – Evans

+0

呃,你應該使用你的函數的第一個實現,而不是第二個。 '$(this).parent('label')'不正確,因爲'this'已經是'label'元素。 –