0

复选框的常见做法是将其与隐藏字段配对,这将确保即使未选中复选框,HTTP 帖子也始终包含一个值。

例如,如果我有一个术语复选框,我可能会这样实现它,同时使用复选框和隐藏元素:

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

当它被回发时,HTTP 请求包含两个值(选中时):

termsAgreement=true&termsAgreement=false

或一个值(未选中时):

条款协议=假

这很容易处理,因为您只需要OR两种方式的值,您就会得到正确的值。

但是,如果您想确定客户端的正确值,我能想到的唯一解决方案涉及一些非常讨厌的逻辑。

在这种情况下,是否有一种优雅的方法可以相当容易地确定使用 JavaScript 或 jQuery 的值?

4

1 回答 1

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);
   }
}

如果您有多个复选框,只需将其抽象为一种方法。

于 2013-01-24T18:12:33.493 回答