如何让这个 jQuery 函数更优雅?

Posted

技术标签:

【中文标题】如何让这个 jQuery 函数更优雅?【英文标题】:How to make this jQuery function more elegant? 【发布时间】:2010-09-29 07:45:55 【问题描述】:

在我的页面上,我有一个下拉选择框,默认值为(空)。当用户选择一个条目时,会显示该条目类型的相应表单。

几个问题..

    代码不是 DRY,看起来比它需要的更冗长,因此不容易维护/扩展。 当用户选择某项内容、填写表单、转到下一页,然后单击“返回”按钮时,选择字段已预先选择了他们的选择,但由于没有.change() 事件,不显示表单框。他们必须选择不同的<option>,然后单击返回原来的选择以恢复他们的论坛。

代码如下:

<script type="text/javascript">
    $(document).ready(function()

        $('#select_type').change(function () 
            $('fieldset').css('display','none'); # hide all the forms on the page
            var selectval = $('#select_type').val();
            if (selectval == 'instance')
            
                $('#instance').toggle();
            
            if (selectval == 'mob')
            
                $('#mob').toggle();
            
            if (selectval == 'dailyquest')
            
                $('#dailyquest').toggle();
            
            if (selectval == 'repeatablequest')
            
                $('#repeatablequest').toggle();
            
            if (selectval == 'zonequest')
            
                $('#zonequest').toggle();
            
            if (selectval == 'reward')
            
                $('#reward').toggle();
            
        );

    );
</script>

帮助 SO 的 JS 大师!

【问题讨论】:

【参考方案1】:

您可以迭代一个值数组,而不是多个 IF 子句。但是在这种情况下,如果没有其他要求,那么只需:

$(document).ready(function()
     var select = $('#select_type');
     $('#' + select.val()).toggle(); // Toggle the preset value
     select.change(function () 
         $('fieldset').css('display','none');
         $('#' + $(this).val()).toggle();
     );
);

应该够了。

【讨论】:

是的,这正是我在寻找问题 #1 的内容。关于问题 #2 的任何想法? 错过了。将其添加到答案中 谢谢。希望你能在那里找到有用的东西:)【参考方案2】:
$(document).ready(function() 
  $("#select_type").change(function () 
    $("fieldset").css("display", "none");
    $("#" + $(this).val()).toggle();
  ).change();
);

【讨论】:

【参考方案3】:
    您可以将所有这些 if 语句更改为一些 or(||) 表达式。 在 ready() 上,您可以检查字段是否具有默认值。如果没有,那么您可以手动触发 change()。

【讨论】:

【参考方案4】:

我可能不会使用选择框,因为只有当用户在下拉选项之前就知道选项时,选择框才是一个不错的选择。不允许使用神秘肉。这是一篇关于selection dependant inputs 的好文章。

我对这个问题的看法: * 应该只显示链接到所选选项的部分,所以我不想使用切换。

$(function()
  var sel = $("#select_type");
  $("#"+sel.val()).show();
  sel.change(function()
    $(this).children("option").each(function()
      $("#"+this.value)[this.selected ? "show" : "hide"]();
    );
  );
);

【讨论】:

以上是关于如何让这个 jQuery 函数更优雅?的主要内容,如果未能解决你的问题,请参考以下文章

如何让这个 UINavigationController 寻求代码更优雅?

如何更优雅的使用 Java 8 函数式编程?

如何让你的代码变得更优雅?这些代码规范和技巧必须知道(进阶必备,建议收藏)

如何让你的代码变得更优雅?这些代码规范和技巧必须知道(进阶必备,建议收藏)

寻找 Java 代码美化器(或者可能不是美化,而是让代码更优雅的东西)[关闭]

9个小技巧让你的 if else看起来更优雅