我需要获取选中的复选框的值(一次只允许选中一个),我有这段冗长的代码:
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
}
最佳答案
$(function()
{
...
// IF (these are the only elements that id starts with ckbx_) THEN
rptval = $('[id^=ckbx_]').filter(':checked').val();
// ELSE
// this syntax is more maintainable than $('#ckbx_produceusage, #ckbx_fillrate, ... selectors à la queue');
rptval = $('#ckbx_produceusage').add('#ckbx_fillrate').add('#ckbx_deliveryperformance').add('#ckbx_pricecompliance').filter(':checked').val();
// FI
...
});
关于jquery - 我怎样才能使这个冗长的 jquery 优雅化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36870365/