jQuery .on() 没有触发所需的功能
jQuery .on() not triggering the desired function
我写了一些代码来过滤集合内部。但是当输入点击时它不会触发(用console.log
检查)
这是我的代码:
{% for collection in collections %}
$('#collection-{{ collection.title | replace: " ", "" }}').on('click', function(event){
showCollection('{{ collection.title | replace: " ", "" }}');
});
{% endfor %}
这是 HTML:
{% for collection in collections %}
<li>
<input type="radio" name="categoryCollection" id="collection-{{ collection.title | replace: " ", "" }}" value="{{ collection.title }}">
<label for="collection-{{ collection.title | replace: " ", "" }}">{{ collection.title }}</label>
</li>
{% endfor %}
我错过了什么?谢谢!
编辑:
我使用的逻辑是流动的,因为我正在创建一个 Shopify 主题。此外,在控制台中一切正常。
我将在此处添加呈现的 HTML:
<ul>
<li>
<input type="radio" name="categoryCollection" id="collection-Jackets" value="Jackets">
<label for="collection-Jackets">Jackets</label>
</li>
<li>
<input type="radio" name="categoryCollection" id="collection-LuxuryTracksuits" value="Luxury Tracksuits">
<label for="collection-LuxuryTracksuits">Luxury Tracksuits</label>
</li>
<li>
<input type="radio" name="categoryCollection" id="collection-Masks" value="Masks">
<label for="collection-Masks">Masks</label>
</li>
<li>
<input type="radio" name="categoryCollection" id="collection-T-Shirts" value="T-Shirts">
<label for="collection-T-Shirts">T-Shirts</label>
</li>
<li>
<input type="radio" name="categoryCollection" id="collection-Trousers" value="Trousers">
<label for="collection-Trousers">Trousers</label>
</li>
</ul>
EDIT2:我创建了一个有效的 fiddle,它只有一个问题:它有效。 Here you can see it
这可以变得更加通用,而无需循环为每个无线电 ID 创建事件侦听器。
请注意添加到每个内容元素的 class,以便使隐藏它们也通用
只需从发生事件的无线电中获取值即可过滤出您需要显示的内容
$('.filter :radio[name="collection"]').change(function(){
const content_id = 'collection_' + this.value.toLowerCase();
$('.collection_content').hide().filter('#' + content_id).show();
});
.collection_content{display:none}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="filter">
<ul>
<li>
<input type="radio" id="Jackets" value="Jackets" name="collection">
<label for="jackets" >Jackets</label>
</li>
<li>
<input type="radio" id="Shirts" value="Shirts" name="collection">
<label for="Shirts">shirts</label>
</li>
<li>
<input type="radio" id="Masks" value="Masks" name="collection">
<label for="Masks">Masks</label>
</li>
</ul>
</div>
<div class="collection-wrap">
<div id="collection_jackets" class="collection_content">JacketsJacketsJackets</div>
<div id="collection_shirts" class="collection_content">ShirtsShirtsShirts</div>
<div id="collection_masks" class="collection_content">MaksMaksMaks</div>
</div>
我写了一些代码来过滤集合内部。但是当输入点击时它不会触发(用console.log
检查)
这是我的代码:
{% for collection in collections %}
$('#collection-{{ collection.title | replace: " ", "" }}').on('click', function(event){
showCollection('{{ collection.title | replace: " ", "" }}');
});
{% endfor %}
这是 HTML:
{% for collection in collections %}
<li>
<input type="radio" name="categoryCollection" id="collection-{{ collection.title | replace: " ", "" }}" value="{{ collection.title }}">
<label for="collection-{{ collection.title | replace: " ", "" }}">{{ collection.title }}</label>
</li>
{% endfor %}
我错过了什么?谢谢!
编辑: 我使用的逻辑是流动的,因为我正在创建一个 Shopify 主题。此外,在控制台中一切正常。 我将在此处添加呈现的 HTML:
<ul>
<li>
<input type="radio" name="categoryCollection" id="collection-Jackets" value="Jackets">
<label for="collection-Jackets">Jackets</label>
</li>
<li>
<input type="radio" name="categoryCollection" id="collection-LuxuryTracksuits" value="Luxury Tracksuits">
<label for="collection-LuxuryTracksuits">Luxury Tracksuits</label>
</li>
<li>
<input type="radio" name="categoryCollection" id="collection-Masks" value="Masks">
<label for="collection-Masks">Masks</label>
</li>
<li>
<input type="radio" name="categoryCollection" id="collection-T-Shirts" value="T-Shirts">
<label for="collection-T-Shirts">T-Shirts</label>
</li>
<li>
<input type="radio" name="categoryCollection" id="collection-Trousers" value="Trousers">
<label for="collection-Trousers">Trousers</label>
</li>
</ul>
EDIT2:我创建了一个有效的 fiddle,它只有一个问题:它有效。 Here you can see it
这可以变得更加通用,而无需循环为每个无线电 ID 创建事件侦听器。
请注意添加到每个内容元素的 class,以便使隐藏它们也通用
只需从发生事件的无线电中获取值即可过滤出您需要显示的内容
$('.filter :radio[name="collection"]').change(function(){
const content_id = 'collection_' + this.value.toLowerCase();
$('.collection_content').hide().filter('#' + content_id).show();
});
.collection_content{display:none}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="filter">
<ul>
<li>
<input type="radio" id="Jackets" value="Jackets" name="collection">
<label for="jackets" >Jackets</label>
</li>
<li>
<input type="radio" id="Shirts" value="Shirts" name="collection">
<label for="Shirts">shirts</label>
</li>
<li>
<input type="radio" id="Masks" value="Masks" name="collection">
<label for="Masks">Masks</label>
</li>
</ul>
</div>
<div class="collection-wrap">
<div id="collection_jackets" class="collection_content">JacketsJacketsJackets</div>
<div id="collection_shirts" class="collection_content">ShirtsShirtsShirts</div>
<div id="collection_masks" class="collection_content">MaksMaksMaks</div>
</div>