根据选择值显示/隐藏按钮

dat*_*ane 2 jquery onchange drop-down-menu

在我的Shopify商店中,我有一个for循环,它将显示页面上的每个产品.对于每个产品,在底部,我有一个select将确定每个产品的结算频率.目前有3种产品,如果重要的话:

<select id="ma" class="single-option-selector" name="frequency">
    <option value="">Monthly</option>
    <option value="annual">Annual - 1 Month Free</option>
</select>
Run Code Online (Sandbox Code Playgroud)

然后我根据所选选项(每月或每年)显示"继续"按钮

<a href="{{ product.url | within: collection }}" class="monthly-btn btn">
    <span id="AddToCartText">Select Plan</span>
</a>

<a href="{{ product.url | within: collection | append: '-annual' }}" class="annual-btn btn">
    <span id="AddToCartText">Select Plan</span>
</a>
Run Code Online (Sandbox Code Playgroud)

我正在寻找合适的脚本,它将隐藏并显示基于当前所选选项的按钮.这是我现在没有做任何事情(我通过在那里添加警报确认 - 更改值时我没有得到任何警报弹出窗口)

<script>
  $(document).ready( function () {
    $('.annual-btn').each( function() {
      $(this).hide();
    });
  });

$('#ma').each( function() { 
  $(this).change( function () {
    var valx = $(this).val()
    if (valx == 'annual') {
      $('.monthly-btn').hide();
      $('.annual-btn').show();
      alert('test');
    } else {
      $('.monthly-btn').show();
      $('.annual-btn').hide();
      alert('test2');
    }
  });
});
</script>
Run Code Online (Sandbox Code Playgroud)

另外,我尝试了将.each(),.change()添加到函数中的所有可能组合,以及直接从select(so with onchange="changeFunction();")调用函数.谁能帮我吗?

Gre*_*can 5

您不需要使用'each()'函数.此外,添加到DOM元素的任何事件侦听器都应包含在

$(document).ready(function(){ ... code goes here ...});
Run Code Online (Sandbox Code Playgroud)

或者它的快捷方式:

$(function(){ ... code goes here ...});
Run Code Online (Sandbox Code Playgroud)

否则,添加事件侦听器时,该元素可能不存在.

而且我个人用css来隐藏年度btn

.annual-btn { display: none; }
Run Code Online (Sandbox Code Playgroud)

然后你的JavaScript将是这样的:

$(function(){
    $('#ma').change(function(){
       var opt = $(this).val();
        if(opt == 'annual'){
            $('.monthly-btn').hide();
            $('.annual-btn').show();
        }else{
            $('.monthly-btn').show();
            $('.annual-btn').hide();
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

这是一个工作小提琴:http://jsfiddle.net/qyb83hxv/1/

  • 问题#2是你有3个具有相同ID的下拉列表(id ="ma").这是一个很大的禁忌.使用$('#ma')只会返回它找到的第一个元素.使用类似$('.ma')的类将返回匹配元素的数组. (2认同)