javascript - jQuery点击动态添加的类
问题描述
我想在第一次单击时向按钮添加一个类,当再次单击新添加的类时,它应该做一些事情(例如显示警报)。
我正在尝试这个,但这会在第一次点击时显示警报,即使该类最初不存在。
HTML:
<div id="banner-message">
<p>On first click, add .added class to the button</p>
<p>On clicking .added, show alert</p>
<button>Click</button>
</div>
jQuery
$('button').on('click', function(e){
e.preventDefault();
$(this).addClass("added");
})
$(document).on('click', '.added', function(e){
e.preventDefault();
alert("Clicked on .added");
})
JSFiddle: https ://jsfiddle.net/n837rw5h/
解决方案
问题是click
正在传播到委托的点击处理程序,当点击到达委托的处理程序时,按钮已经有了类,所以委托的处理程序会触发。
只需将点击传播置于顶部,因此它不会到达委托处理程序,而是return false
在最后添加或添加e.stopPropagation()
到您的第一个 click` 处理程序。如果按钮已经具有类,则不需要这样做,这样您就不会阻止委托处理程序在它已经具有类时触发:
$('button').on('click', function(e){
var $this = $(this);
if (!$this.hasClass("added")) {
$this.addClass("added");
return false;
}
});
现场示例:
$('button').on('click', function(e){
var $this = $(this);
if (!$this.hasClass("added")) {
$this.addClass("added");
return false;
}
});
$(document).on('click', '.added', function(e){
e.preventDefault();
alert("Clicked on .added");
})
<div id="banner-message">
<p>On first click, add .added class to the button</p>
<p>On clicking .added, show alert</p>
<button>Click</button>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
在该示例中,我return false;
在末尾添加(并删除e.preventDefault()
),因为return false
jQuery 单击处理程序既可以防止默认值,也可以停止传播。
另一种方法是使用两个委托处理程序:一个用于当它没有类时,另一个用于当它有类时:
$(document).on('click', '.foo:not(.added)', function(e){
e.preventDefault();
$(this).addClass("added");
});
$(document).on('click', '.added', function(e){
e.preventDefault();
alert("Clicked on .added");
})
<div id="banner-message">
<p>On first click, add .added class to the button</p>
<p>On clicking .added, show alert</p>
<button class="foo">Click</button>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
注意我向按钮添加了一个类,以便我可以为第一个委托处理程序识别它。
推荐阅读
- android - 如何在具有多个文本视图的 Android 上选择所有文本?
- c# - 通过 Dapper 在查询中传递 UTC 日期
- postgresql - 使用 Ecto 预填充 PostgreSQL 表的建议
- python - 从 HTML 中获取特定字符串以进行网络抓取
- ubuntu - 在 SSH 中生成文件后无法启动文件
- java - 如何验证使用 mockito 调用公共类的静态方法?
- node.js - Node.js 使用 gzip 解压 base64 编码的压缩字符串
- java - java中有没有类似asp.net SignalR的东西?
- php - 我在递归 php 函数中有一个错误
- java - 迭代器方法是否仅适用于集合框架中的集合?