2013-01-24 73 views
0

複選框的常見做法是將其與隱藏字段配對,從而確保即使取消選中該複選框,該HTTP帖子也始終包含一個值。使用JavaScript確定複選框+隱藏字段組合的值

舉例來說,如果我有一個條款複選框,我可能會實現它這個樣子,與複選框和一個隱藏的元素都:

<input type="checkbox" name="termsAgreement" value="true"> I accept the terms. 
<input type="hidden" name="termsAgreement" value="false"> 

當它被貼後背,在HTTP請求中包含以下兩個值(選中時):

termsAgreement =真& termsAgreement =假

還是一個值(當沒有檢查編輯):

termsAgreement =假

可以很容易地處理這個問題,因爲你只需要OR值無論哪種方式,你會得到應有的價值。然而,如果你想確定客戶端的適當值,我能想到的唯一解決方案涉及一些非常討厭的邏輯。

在這種情況下,是否有一種比較容易使用JavaScript或jQuery確定值的優雅方法?

回答

1

我從來沒有與隱藏的領域打擾。在PHP或Java中,我只是使用isset(或等效)方法來查看該值是否存在,並在不存在時認爲它未被檢查。

在你的情況下,我會考慮給複選框本身一個id並使用checked屬性來查看它是否被選中。

HTML:

<input id="termsAgreementCB" type="checkbox" name="termsAgreement" value="true"> 

使用Javascript:

var cbRef = getElementById('termsAgreementCB'); 
if(cbRef.checked) { 
    /// The checkbox is checked. 
} 

JQuery的< = 1.5

if($('#termsAgreementCB").attr('checked')) { 
    /// The checkbox is checked. 
} 

JQuery的1.6

if($('#termsAgreementCB").prop('checked')) { 
    /// The checkbox is checked. 
} 

編輯 根據你的評論,我會研究你的MVC的文件,看看是否有可能把ID放在輸出的輸入。如果不是,你可以把它們包裝在一個div中。

var $value = ''`enter code here`; 
$('#myDiv input').each() { 
    if($(this).attr('type') == 'checkbox' && $(this).attr('checked')) { 
     $value = $(this).attr('value'); 
    } else if($(this).attr('type') == hidden && $value == '') { 
     $value = $(this).attr('value); 
    } 
} 

如果您有多個複選框,只需將其抽象爲方法即可。

+0

謝謝,但這並不能解決我的問題。我需要一個適用於組合的解決方案。這是[MVC如何處理複選框](http://stackoverflow.com/questions/2697299/asp-net-mvc-why-is-html-checkbox-generating-an-additional-hidden-input),也似乎是[Rails中的常見做法](http://stackoverflow.com/a/2860969/213902)。 –

相關問題