代码之家  ›  专栏  ›  技术社区  ›  Enrique Vargas

如何将函数应用于选项所选标记?

  •  1
  • Enrique Vargas  · 技术社区  · 7 年前

    我有以下下拉列表:

        <select id="role" name="role" class="form-control">
          <option selected>Choose an option</option>
          {% for index, value in roles_form.fields.roles.choices %}
              <option value="{{ index }}">{{ value }}</option>
          {% endfor %}
        </select>
    

    我有一个函数,当用户在选项之间选择时,它可以显示和隐藏另一个div:

    $('select').on('change', function() {
          var developer = {{ developer_id }};
          var value = $(this).val();
          console.log(developer);
    
          if (value == developer) {
            $('#github_link').show();
          } else {
            $('#github_link').hide();
          }
    })
    

    所以,当用户选择 Developer div仍然显示,当他们选择任何其他选项时,该div将隐藏。一切正常,但有一件事,当页面加载此标记时: <option selected>Choose an option</option> mantain显示的div,这是不正确的,当页面加载时,div也需要隐藏。

    但是我不太确定如何将它添加到函数中,有什么想法吗?

    3 回复  |  直到 7 年前
        1
  •  2
  •   Taplar    7 年前

    如果您的问题是希望这个逻辑在页面加载上运行,也可以在更改上运行,那么您可以简单地触发它。

    $(...).on('change', ...).trigger('change');
    

    trigger 将导致事件处理程序立即执行。

        2
  •  1
  •   Lajos Arpad    7 年前

    您可以简单地添加

    style="display: none;"
    

    在标签上 github_link id 当你在html中定义它时。把它露出来藏起来就行了。

    不过,定义css更为优雅 class 像:

    .invisible {
        display: none;
    }
    

    使用 addClass / removeClass 隐藏/显示标签,据我所知, show() hide() 不是jquery中最快的特性:

    $('select').on('change', function() {
          var developer = {{ developer_id }};
          var value = $(this).val();
          console.log(developer);
    
          $("#github_link")[((value == developer) ? "remove" : "add") + "Class"]("invisible");
    })
    
        3
  •  0
  •   Lemayzeur    7 年前

    当您的选择被更改时,您的脚本将加载,因此要使它在页面加载时工作,您需要将它放在任何事件之外

    var developer = {{ developer_id }};
    
    $('select').on('change', function() {
      var value = $(this).val();
      console.log(developer);
    
      if (value == developer) {
        $('#github_link').show();
      } else {
        $('#github_link').hide();
      }
    })
    
    // Outside any events as well
    
    var value = $('select').val();
    
    if (value == developer) {
        $('#github_link').show();
    } else {
        $('#github_link').hide();
    }
    

    或者让它更简单,我们可以把它放在一个函数中:

    var developer = {{ developer_id }};
    
    function fName(value){
        if (value == developer) {
             $('#github_link').show();
        } else {
            $('#github_link').hide();
        }
    }
    
    $('select').on('change', function() {
        var value = $(this).val();
        console.log(developer);
    
        fName(value)
    });
    fName($('select').val());