2011-09-27 47 views
0

HTML:方框內打勾,驗證

<div> 
    <input> 
    <label> 
</div> 

JS:

$('div input').live('click',function(){ 
    alert($(this).is(':checked')); 
}); 
$('div').live('click,'function(e){ 
    if(!$(e.target).is('input')) 
     $(this).find('input').click(); 
}); 

每當我點擊輸入它準確地顯示輸入變成什麼成(如果我打開它提醒真實的輸入)
但是,無論何時點擊div /標籤,它都會做相反的操作(當輸入打開時,它會提醒虛假)

有沒有辦法測試輸入是否在兩種情況下都打開和關閉,而不是1?我猜想這是因爲瀏覽器在jquery之前觸發了一個原因(儘管我認爲jquery應該首先發生,但無論如何),並且在另一種情況下,jquery在運行之前運行觸發'檢查',但似乎無法弄清楚如何延遲觸發,直到腳本之後,或強制它在腳本之前運行。]

在此先感謝!

+0

什麼是你想在這裏實現?如果你的目的是點擊標籤檢查或取消選中將自動發生的複選框,如果你有'

回答

2

您可以在複選框本身上監控change(),然後在DIV上單擊您可以直接更改複選框中的值,然後觸發change()而不是click()

$('input[type="checkbox"]').live('change',function(){ 
    alert($(this).is(':checked')); 
}); 

$('div').live('click',function(e){ 
    if(!$(e.target).is('input')) { 
     var $input = $(this).find('input'); 
     $input.prop("checked", !$input.is(':checked')).change(); 
    } 
}); 

另外,如果你的目的是爲了避免整個<label for="" />煩惱,檢查了這一點。

<label><input type="checkbox" value="awesome" /> Check it</label> 
+0

這最終會工作(ish)。我不得不將它從.prop改爲.attr,因爲我的jquery版本不支持.prop方法。使用變化與點擊的好主意。 –

1

試試這個:

$('div input').live('click',function(){ 
    alert($(this).is(':checked')); 
}); 
$('div').live('click,'function(e){ 
    if(!$(e.target).is('input')) 
     $(this).find('input').triggerHandler("click"); 
}); 
+0

'jQuery.triggerHandler()'不會與'jQuery.live()'一起工作,因爲實況觀察文檔上的事件,而不是有問題的元素,而'triggerHandler()'不會引起冒泡。在觸發處理程序之前,您還必須擴展您的答案以執行更新複選框,因爲它是您跳過的瀏覽器的默認行爲,它是更新複選框值的瀏覽器。 –

+0

我剛剛嘗試過,正如Mike所說的那樣,不幸的是它無法正常工作。 –