2012-09-10 100 views
1

我有一個輸入(各種)的三個子組的形式。子組由類名(.group_1,.group_2,.group_3)表示。jQuery - removeClass在所有輸入都獲得焦點後?

我想這樣做是這樣的:

一旦所有特定類的輸入(例如.group_1),已收到焦點(或者被改變,或者將工作),類單獨跨度是刪除(假定使用removeClass)。如果特定班級中的5個輸入中只有4個獲得了焦點(或已更改),則該班級將保持在該範圍內直到第5個焦點或焦點被更改。

希望是有道理的,在此先感謝您的幫助。

回答

3

如何像這樣簡單:

http://jsfiddle.net/zerkms/7EUas/

var selectedMarkerClass = 'was-selected'; 

$('.group_1').on('focus', function() { 
    $(this).addClass(selectedMarkerClass); 

    if ($('.' + selectedMarkerClass).length == $('.group_1').length) { 
     $('div').text('each input was selected at least once'); 
    } 
});​ 

+1

啊!打敗我吧。我jsfiddling並提出了基本上相同類型的解決方案:http://jsfiddle.net/tomtheman5/dB2Gs/ –

+0

這種解決方案看起來好像它可能工作得很好,我感謝您的迴應。我將'.on('focus')'改爲'.change()',這樣我就可以強制改變輸入。作爲後續,我如何操作它,以便組中的任何單選按鈕將被視爲一個變化?換句話說,如果單選按鈕「是」更改爲單選按鈕「否」(相同名稱屬性),是否有方法將該更改添加到'selectedMarkerClass'(按照您的示例)?謝謝! – user1647550

+0

我可能會添加,我想這樣做而不會爲每個輸入創建單獨的選擇器。我正在使用的表單有數百個字段。 – user1647550

0

您可以使用一些僞類將輸入標記爲專注於focus事件,並檢查它們是否都已集中。如果是的話,然後從你的範圍中刪除班級。

HTML:

<span class="group1 red">Test span</span> 

<div id="group1-container"> 
    <input class="group1" type="text" /> 
    <input class="group1" type="text" /> 
    <input class="group1" type="text" /> 
    <input class="group1" type="text" /> 
    <input class="group1" type="text" /> 
</div>​ 

的JavaScript:

group1Container$ = $('#group1-container'); 
group1$ = $('input.group1', group1Container$); 
group1$.on('focus', function() { 
    var input$ = $(this); 
    input$.addClass('focused'); 
    if(!$('input.group1:not(.focused)', group1Container$).length) { 
     $('span.group1').removeClass('red'); 
     group1$.off('focus'); 
    } 
}); 

​DEMO

相關問題