jQuery:传播事件&行动
jQuery: propagating events & actions
抱歉标题有误。
JSFiddle链接
描述:
我有两个事件附加到同一个元素,该元素根据其状态具有不同的类。
第一个click
事件添加了一个expanded
类并更改其文本(仅用于可见性目的)。
第二个click
事件附加到由expanded
类修改的元素。
问题:
第二个click
事件从未激发。不删除类并更改文本。
如果你在没有CCD_ 6的情况下尝试它,它会立即激发两个first&第二个click
事件,第一个事件不会对元素进行任何视觉更改。
jQuery
$('button').click(function() {
$(this).addClass('expanded');
$(this).text('Expanded class added');
event.stopPropagation();
});
$(document).on('click','button.expanded', function() {
$(this).removeClass('expanded');
$(this).text('Expanded class removed')
});
问题:如何正确执行点击事件,同时两个事件都在做它们应该做的事情?
- 绑定
button
上的事件 - 检查单击的按钮是否具有类
expanded
,如果存在,则移除它,否则添加它 - 更新单击的元素的innerText。如果按钮添加了类
expanded
(第二步中的),则使用$(this).hasClass('expanded') ? "added" : "removed")
的三元运算符将返回"added"
,否则返回"removed"
代码:
$(document).on('click', 'button', function () {
$(this).toggleClass('expanded') // Toggle `expanded` class of the clicked button
.text('Expanded class ' + ($(this).hasClass('expanded') ? "added" : "removed")); // Update text
});
-演示-
编辑:为了好玩,要设置文本按钮的内容,可以使用CSS伪元素:
$(document).on('click','button', function() {
$(this).toggleClass('expanded');
});
button:not([class]):before {
content: "Click me"
}
button.expanded:after {
content: "added";
}
button[class]:not(.expanded):after {
content: "removed";
}
button[class]:before {
content: "Expanded class "
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<button></button>
我认为一种更简单的方法是将两个处理程序都放在委托点击事件中:
$(document).on('click','button', function(event) {
if ($(event.target).hasClass('expanded')) {
$(event.target).removeClass('expanded');
$(event.target).text('Expanded class removed')
}
else {
$(event.target).addClass('expanded');
$(event.target).text('Expanded class added');
}
return false;
});
更新的fiddle:https://jsfiddle.net/jvL8z2dw/4/
让这个小清洁和坚固。
$('button').click(function() {
$(this).toggleClass("expanded");
if ($(this).hasClass("expanded")) {
$(this).text('Expanded class added');
} else {
$(this).text('Expanded class removed')
}
return false;
});
.expanded {
background-color: yellow;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>Click me</button>
这应该为做这件事
$(document).on('click', 'button', function (event) {
$(this).toggleClass('expanded')
if($(this).hasClass('expanded')) {
$(this).text('Expanded class added');
} else {
$($this).text('Expanded class removed')
}
return false;
});
相关文章:
- jquery点击函数select&取消选择
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- Angular js-返回一个包含类似
- 一点javascript元编程&可链接的设置器
- 通过JSON&比较时间
- Jquery模板,如果xx&&如果yy
- jQuery工具验证器自定义效果-添加&消除影响
- Twitter引导程序Typeahead-Id&标签
- AngularJS&JSON-从Previous&下一个对象
- 什么是&&在没有if的行中的变量之间
- 关于引入外部javascript文件的问题&css通过https
- 指令的模板必须只有一个根元素:With restrict E&替换true
- 使用ajax的服务器端分页&jQuery
- Javascript,如果条件在没有&&逻辑运算符当&&它不起作用
- 如何使用dropzone&vueJs
- 如何准确执行加载脚本&退出弹出窗口
- 如何添加CSS&JavaScript进入Windows窗体应用程序C#.net
- Solr查询以按日期月份获取数据&年
- 显示&作为&在jsp中使用angularjs而不使用ng-bind-html
- jQuery:传播事件&行动