【发布时间】:2016-04-26 16:12:52
【问题描述】:
我需要获取选中复选框的值(一次只允许选中一个),并且我有这个详细的代码:
if (!checkboxSelected) {
return;
}
if($("#ckbx_produceusage").is(':checked')) {
rptval = $('#ckbx_produceusage').val();
}
else if($("#ckbx_deliveryperformance").is(':checked')) {
rptval = $('#ckbx_deliveryperformance').val();
}
else if($("#ckbx_fillrate").is(':checked')) {
rptval = $('#ckbx_fillrate').val();
}
else if($("#ckbx_pricecompliance").is(':checked')) {
rptval = $('#ckbx_pricecompliance').val();
}
setEmailAndGenerateValsForUnitReportPair(unitval, rptval);
有没有一种方法可以让这段代码不那么冗长而又不会让它变得难以理解?我想动态地将一个类添加到选中的复选框中,然后从之前添加过该类的任何内容中删除它,然后根据当前使用该类装饰的那个来获取 rptval。不过,这似乎有点臭或 Rubegoldbergesque,所以我正在寻找更好的解决方案。
更新
对于 T.J. Crowder,这里是 HTML(Razor/ASP.NET MVC 风格):
@foreach (var rpt in reports)
{
@* convert id to lowercase and no spaces *@
var morphedRptName = @rpt.report.Replace(" ", string.Empty).ToLower();
<input class="ckbx leftmargin8" id="ckbx_@(morphedRptName)" type="checkbox" value="@rpt.report" />@rpt.report
}
【问题讨论】:
-
$('#all, #selectors').filter(':checked').first()可能会带你到某个地方。 -
HTML 是什么样的?虽然我们可以在不改变的情况下改进它,但如果我们确实改变它,我们可能会改进更多。
-
@amphetamachine:这比我下面的回答好多了。你应该发布它。我应该尴尬地低下头。 ;-)
-
@amphetamachine 虽然简单,但如果没有检查任何错误,则不会处理错误。
-
你为什么不给他们一个共同的类?那么你可以通过
$(".class:checked").val()来获取被选中的那个吗?