jquery - 我怎样才能使这个冗长的 jquery 优雅化?

标签 jquery html css ischecked

我需要获取选中的复选框的值(一次只允许选中一个),我有这段冗长的代码:

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/

相关文章:

javascript - jQuery:用跨度的值填充文本框

javascript - JQuery Mobile .page() 函数导致无限循环?

javascript - 这段 jQuery 代码中的错误在哪里?

javascript - 将 css background-image : url(. ..) 替换为 <img> 标签并保持滚动效果

html - 有没有办法通过相对定位将元素放在其父元素的底部

html - 固定的 div 溢出父高度

jquery可调整大小附加图像大小问题

jquery - 如何使用 Jquery Mobile 和 Coldfusion8 的主题标签链接来避免 "invalid construct"错误?

html - 垂直增长元素,同时定位到其他元素的右侧

css - 如何在引导按钮中水平居中文本?