我可以期待在jQuery中的点击功能
Can I anticipate an on click function in jQuery?
我有这个问题
我有一些元素,实际上是<li>
元素,对于这些元素,我对它们进行了一个操作,很容易做到,像这样:
$('.panelTabs li').on('click', function () {
// ..some operation that change some tab associated to the list
});
然后在我的代码中,我需要应用另一个点击操作,必须检查我是否可以执行前一个操作。
$('.panelTabs li').on('click', function (ev) {
// ..some operation that makes some check
if(bActiveRequests === 0){
ev.stopPropagation();
}
});
但是第一个函数是在包含检查的第二个函数之前应用的,所以当然我的stopPropagation()不能工作,因为它是在之后执行的。
所以我问是否有一种方法可以在函数已经应用于同一元素之前添加预期的单击函数。
我考虑将该函数保存在一个变量中,然后从li中删除该函数,然后添加我的函数,然后添加前一个函数…但这有点棘手,一点也不好。
我可以在第一个JavaScript文件之前包含第二个JavaScript文件。但由于代码的原因,这也有点棘手。
任何想法?
您至少可以使用两种方法来完成此操作(我相信其他人可能会提出更多方法)。
首先,您可以使用setTimeout
来延迟第二次单击,并在第一次单击发生之前执行验证。
下面是一个例子:
var shouldCancel = false;
//First event
//Without the setTimeout, this event would be triggered first.
$("#button1").click(function (e) {
setTimeout(function () {
if (!shouldCancel) {
alert("test2");
} // end if
}, 500);
});
//Second event
$("#button1").click(function (e) {
//Perform validation checks here...
alert("test1");
shouldCancel = true;
e.stopPropagation();
e.preventDefault();
});
另一种选择(我的偏好和不那么黑客)是使用"验证"方法,将检查作为单击的一部分。
$("#button2").click(function (e) {
// ..some operation that makes some check and assigns a value to the "shouldCancel" property below
$(document).trigger("should-continue", {
shouldBeCanceled: shouldCancel,
callback: function () {
alert("test2");
}
});
});
$(document).bind("should-continue", function (e, data) {
if (data.shouldBeCanceled) {
e.stopPropagation();
e.preventDefault();
return;
} else {
alert("test1");
data.callback(); // Call the method specified by the caller
} // end if/else
});
下面是一个演示这两个方法的JSFiddle: http://jsfiddle.net/xDaevax/3ucby35x/
下面是一些在JS中处理事件的有用链接:
- http://javascript.info/tutorial/events-and-timing-depth
- 确保jQuery事件处理程序的执行顺序
- JavaScript事件处理程序执行顺序
- http://www.quirksmode.org/js/events_advanced.html
只需将选择语句放入原始的单击处理程序中:
$('.panelTabs li').on('click', function () {
// ..some operation that makes some check
if(bActiveRequests === 0){
// ..some operation that change some tab associated to the list
}
});
我想到的另一个解决方案是添加一个类disabled <li>
元素时,操作应该被触发。一旦需要重新激活它,我将从<li>
中删除该类。
在一般设置中,我可以检查这个类,如果它存在,那么它将停止操作。
$('.panelTabs li').on('click', function () {
if($(this).hasClass('disabled')){
ev.stopPropagation();
}
});
相关文章:
- 添加文字和评论功能更新Div
- JavaScript打印功能使日历停止工作
- 每当您在选择器内移动鼠标时,悬停功能就会重复
- 如何防止网页加载后自动启动功能
- 除修剪外的其他功能
- 悬停功能触发器
- 使用angularjs向浏览器发送servlet响应(下载功能)
- 删除CKEditor工具栏按钮,但不删除功能
- 异步facebook功能
- 如何将chrome扩展功能移植到移动设备(特别是jquery和trello)
- jQuery滚动功能只工作一次
- Graphiti中是否有任何工具提示功能
- React redux初始化功能,无论状态变化如何
- 在哪里可以学习ECMAScript标准中尚未包含的JavaScript功能
- 正在获取select上的功能id
- Rhino打印功能
- 使用(navigator.geolocation)检测浏览器功能错误
- 主体单击删除功能上的输入框宽度
- JQuery使用相同的功能自动完成各种输入文本
- 我可以期待在jQuery中的点击功能