仅当类存在于Javascript中时才允许侦听器事件运行
Only allow listener event to run if class exists in Javascript
我构建了一个进度条Javascript对象,当用户点击绑定了"点击"事件监听器的左按钮或右按钮时,该对象会更新进度条。我只希望这些按钮在附加了某个类的情况下触发点击事件,在本例中是一个名为"进度条ok"的类。到目前为止,我似乎想不出在代码中实现这一点的方法。这是我的代码:
Javascript对象:
//Progress Bar
var ProgressBar = function(element, startVal, endVal, step, addLefts, addRights) {
this.element = element;
this.endVal = endVal;
this.currentVal = startVal;
this.step = step;
this.addLefts = addLefts;
this.addRights = addRights;
var self = this;
}
ProgressBar.prototype.initializeProgressBar = function() {
jQuery(this.element).progressbar({
value : this.currentVal,
max : this.endVal,
step : this.step
});
for(var i = 0; i < this.addLefts.length; i++) {
this.addLefts[i].addEventListener("click", this.removeAmount.bind(this), false);
}
for(var i = 0; i < this.addRights.length; i++) {
this.addRights[i].addEventListener("click", this.addAmount.bind(this), false);
}
}
ProgressBar.prototype.addAmount = function() {
if(this.currentVal < this.endVal) {
this.currentVal += this.step;
this.update();
}
}
ProgressBar.prototype.removeAmount = function() {
console.log(self);
if(this.currentVal > 0) {
this.currentVal -= this.step;
this.update();
}
}
ProgressBar.prototype.update = function() {
jQuery(this.element).progressbar({
value : this.currentVal
});
}
Javascript客户端代码
//Progress Bar
var addLefts = document.getElementsByClassName("btn-lft");
var addRights = document.getElementsByClassName("btn-right");
var progressBar = new ProgressBar("#progress-bar", 0, jQuery(".signup-part").length, 1, addLefts, addRights);
progressBar.initializeProgressBar();
正如你所看到的,"addLefts"answers"addRights"附加了click监听器,我只想在类"progress bar ok"存在的情况下激发"addAmount"answers"removeAmount"函数。有没有一种方法可以将它合并到我的代码中?感谢
您可以检查DOM中是否存在类似的带有类的元素
if ($('.progress-bar-ok').length) {
your code
}
如果使用jQuery创建事件处理程序,则可以利用委派事件,只有当目标具有您指定的类时才会触发委派事件。在这种情况下,您可以使用".progress-bar-ok"
作为选择器,并且只有具有该类的项才会触发事件。
以下是更新的部分代码:
ProgressBar.prototype.initializeProgressBar = function() {
jQuery(this.element).progressbar({
value : this.currentVal,
max : this.endVal,
step : this.step
});
var removeAmount = this.removeAmount.bind(this);
$(addLeft).on("click", ".progress-bar-ok", function() {
removeAmount();
});
var addAmount = this.addAmount.bind(this);
$(addRights).on("click", ".progress-bar-ok", function() {
addAmount();
});
}
var progressBar = new ProgressBar("#progress-bar", 0, jQuery(".signup-part").length, 1, ".btn-lft", ".btn-right");
我已经更改了您的构造函数,以接收您想要针对的类的jQuery选择器,您可以看到我是如何使用jQuery附加事件处理程序的。
我还制作了一个简单的可运行的例子来演示这种效果。下面有两个<ul>
标签,它们使用您的类btn-lft
和btn-right
。我在每个<ul>
中生成了一个随机数目的项目。其中的每个CCD_ 6可以被随机分配一个CCD_。当单击具有该类的项目时,父<ul>
将被清除,并再次随机填充。单击没有类别progress-bar-ok
的项目时不会发生任何事情。运行下面的代码段查看。
$(function() {
//generate arbitrary ul content
generateSide($(".btn-lft"));
generateSide($(".btn-right"));
});
$(".btn-lft,.btn-right").on("click", ".progress-bar-ok", function() {
//this is a delegated event, it handles dynamically created items too!
var ul = $(this).parent();
generateSide(ul);
});
function generateSide(ul) {
//add random content to the ul
var side = ul.hasClass("btn-lft") ? "Left" : "Right";
ul.empty(); //clear ul
var numberSelected = 0;
var newItems = Math.ceil(Math.random() * 10);
for(var i = 0; i < newItems; i++) {
var li = $("<li>" + side + " " + (i + 1) + "</li>");
if (Math.random() > 0.5 || (numberSelected === 0 && i === newItems - 1 ))
li.addClass("progress-bar-ok");
ul.append(li);
}
}
ul {
float:left;
width: 100px;
}
.progress-bar-ok {
color: #4AF;
cursor: pointer;
}
.progress-bar-ok:hover {
text-shadow: 0 0 2px blue;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<ul class="btn-lft">
<li class="selected">Left 1</li>
</ul>
<ul class="btn-right">
<li class="selected">Right 1</li>
</ul>
- Highslide(iframe的侦听器)
- 如何在for循环中添加事件侦听器
- 选项卡侦听器未被来自后台脚本的消息激活
- 未命中服务器发送的事件侦听器
- 如何覆盖原型中的事件侦听器
- 加载侦听器上的函数触发得太早
- 无法将事件侦听器附加到画布
- 如何在d3.js中自定义事件侦听器
- 在 VideoJS 中添加事件侦听器,用于在运行时获取视频持续时间
- 基于集合侦听器运行方法的主干
- 为什么 FirstPersonControls.js 在添加另一个事件侦听器时停止运行
- 添加与谷歌地图信息窗口一起运行的事件侦听器
- 在 Chrome 扩展程序中单击元素之前运行的事件侦听器功能
- 仅当类存在于Javascript中时才允许侦听器事件运行
- JavaScript事件侦听器运行两次
- 事件侦听器属性运行不正常
- 在代码运行时停止事件侦听器
- 使用侦听器为javascript异步运行
- 使用googlemaps事件侦听器运行外部函数的类方法
- Chrome运行时OnMessage侦听器事件未启动