【问题标题】:jQuery: set / reset form fields with certain class (improve code)jQuery:使用特定类设置/重置表单字段(改进代码)
【发布时间】:2015-05-29 09:55:48
【问题描述】:

我是 jQuery 新手,希望这里有人可以帮助我。

我有一个带有 隐藏 div ('#requestDetails') 的大型 HTML 表单。 在这个 div 中,有复选框、单选按钮和带有特定类的特定值 ('.hiddenDefault') 的选择,用于仅在它们可见时应用默认值。

现在我有一个显示这个 div 的事件和另一个再次隐藏它的事件。

显示 div 时我想设置上述默认值。
隐藏它时我想重置字段,包括该 div 中的所有输入字段(即取消选中/取消选择它们并删除任何默认值或输入值)。

我有以下代码,乍一看似乎没问题,但我想知道这是否是正确/有效的代码,我是否在这里遗漏了什么以及是否有更好/更快的方法来实现相同的目标。

我的 jQuery:

$('[name=requestType]').on('change', function(){
    if($(this).hasClass('triggerDiv')){
        $('#requestDetails').find('.hiddenDefault').each(function(){
            // set default values + show div
            $(this).not('select').prop('checked', true);
            $(this).not('input[type=checkbox], input[type=radio]').prop('selected', true);
        });
        $('#requestDetails').show();
    }else{
        $('#requestDetails').find('input, select').each(function(){
            // empty / reset fields + hide div
            $(this).find('input[type=checkbox], input[type=radio]').prop('checked', false);
            $(this).find('input').not(':button, :checkbox, :hidden, :radio, :reset, :submit').val('');
            $(this).find('select').prop('selected', false);                     
        });
        $('#requestDetails').hide();
    }
});

非常感谢您对此提供的任何帮助, 迈克

【问题讨论】:

  • 尝试改变 .prop('checked', true); to .attr('checked', true);
  • @Luca De Nardi:谢谢 - .prop 不是较新的功能吗?
  • 它们看起来非常相似,我会进一步调查。同时尝试在这里检查它们之间的差异:api.jquery.com/prop
  • 谢谢,卢卡! - 我的想法也是,如果有一种方法可以以某种方式将我在不同行中的内容组合起来,就像我认为在我的代码中循环一样,例如隐藏它们时遍历所有字段 3 次(每个 .find 一个)。
  • 要一次设置所有这些,您还可以使用 $('#requestDetails input[type="checkbox"]').attr('checked', 'true')

标签: javascript jquery html find show-hide


【解决方案1】:

只是改进你编写的代码的语法或风格:

$('[name=requestType]').on('change', function(){
    if($(this).hasClass('triggerDiv')){
        // show div + set default values
            $(this).not('select').prop('checked', true);
        $(this).not('input[type=checkbox], input[type=radio]').prop('selected', true);
            $('#requestDetails').show();
    }else{
        // hide div + reset fields
             $('#requestDetails').find('input[type=checkbox], input[type=radio], input, select').not(':button, :checkbox, :hidden, :radio, :reset, :submit').val('').prop('checked', false);             
             $('#requestDetails').hide();
    }
});

对不起,没有检查语法,如果我错了,请纠正我。 这不会像您在每个内部编写的那样提高性能。

【讨论】:

  • @Simple Man:非常感谢 - 这正是我想要的!您可以更新它以显示我刚刚添加的 .not 功能吗?会接受,因为这就是我所需要的。 :)
  • @Emm:谢谢 - 这看起来不像是指我需要它的特定 div 和类(因为此表单上还有其他隐藏的 div 和字段)。跨度>
  • 它给你任何错误吗?我的意思是不申请会做和我一样的事情。
  • @SimpleMan:谢谢 - 我实际上不得不更改它,因为我的原始显示代码无法正常工作,所以我认为调整答案也是有意义的。 :) 另外,关于您的隐藏部分,我是否理解您将复选框和单选的值也设置为 '' 是否正确?是故意的吗?
  • 根据您的要求更新
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-15
  • 2016-03-08
  • 2017-05-12
  • 2014-08-25
  • 1970-01-01
  • 2023-04-01
相关资源
最近更新 更多