【问题标题】:Jquery Show Fields depending on Select Menu value but on page loadJquery 根据选择菜单值显示字段,但在页面加载时
【发布时间】:2010-04-23 10:26:44
【问题描述】:

本题参考题Show/hide fields depending on select value

<select id="viewSelector">
   <option value="0">-- Select a View --</option>       
   <option value="view1">view1</option>
   <option value="view2">view2</option>
   <option value="view3">view3</option>
</select>

<div id="view1">
  <!-- content --> 
</div>
<div id="view2a">
  <!-- content --> 
</div>
<div id="view2b">
  <!-- content --> 
</div>
<div id="view3">
  <!-- content --> 
</div>



$(document).ready(function() {
  $.viewMap = {
    '0' : $([]),
    'view1' : $('#view1'),
    'view2' : $('#view2a, #view2b'),
    'view3' : $('#view3')
  };

  $('#viewSelector').change(function() {
    // hide all
    $.each($.viewMap, function() { this.hide(); });
    // show current
    $.viewMap[$(this).val()].show();
  });
});

当我选择菜单中的第二项时,它会显示相应的字段。

例外情况是当页面加载时选择菜单已经选择了第二个菜单项,该字段不显示。

您可能会说,我是 jquery 的新手,可以肯定地使用一些帮助来调整此代码,以便在页面加载时显示所选项目的字段。

谢谢,

提姆

【问题讨论】:

    标签: jquery forms select


    【解决方案1】:

    在这种情况下,最简单的做法是触发您已经拥有/需要的 change 处理程序,如下所示:

    $('#viewSelector').change(function() {
      $.each($.viewMap, function() { this.hide(); });
      $.viewMap[$(this).val()].show();
    }).change(); //only change to your code!
    

    这只是在您绑定后立即在同一选择器上触发change 事件,因此它会在document.ready(您正在绑定的位置)以及它更改时发生。不带参数的.change() 等价于.trigger('change')

    【讨论】:

    • 这正是我所追求的!所以谢谢。我刚刚透露的自动完成字段中的 Jquery 已经停止工作。如果您对为什么会这样有任何提示,请提供帮助!
    • 自从添加 .change(); 之后,所有其他 Jquery 脚本都已停止在此页面上运行;有什么线索吗?
    • 好的,修好了。我只是重新排序了脚本,以便 .change();是最后一个,一切正常。感谢您的帮助伙计!
    • 非常有帮助,继续回答和帮助像我这样的新手
    • 有没有一种方法,当我选择 1 个值然后我再次选择时,该值返回到它的第一个值,就像占位符一样
    【解决方案2】:

    将代码移动到函数中并调用它 onload -

     $(document).ready(function() {
    
      function toggleDivs(val) {
            $.each($.viewMap, function() { this.hide(); });
            $.viewMap[val].show();
      }
    
      toggleDivs($('#viewSelector').val());
    
      $.viewMap = {
            '0' : $([]),
        'view1' : $('#view1'),
        'view2' : $('#view2a, #view2b'),
        'view3' : $('#view3')
      };
    
      $('#viewSelector').change(function() {
        toggleDivs($(this).val());
      });
    });
    

    当然,如果您只是将选择器数据存储在 &lt;option&gt;..data-selectors="#view2a, #view2b" 的 HTML 中,您可能不需要 $.viewMap

    【讨论】:

    • 感谢您的快速回复。不幸的是,我没有任何快乐。什么都没有加载,我不知道如何调试它。
    猜你喜欢
    • 2021-08-02
    • 2012-08-14
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多