动态页面。希望禁用并稍后重新启用部分。在视觉上它们是灰色的,但需要阻止用户使用该部分直到稍后。
对于使用点击触发器的元素,希望:
重新启用:
到目前为止的回复:
猜想:使用纯javascript html5级别,没有委托或其他一些外部机制,无法从元素中提取点击触发器。
非常受到代表团的诱惑 - 并且由于无法阻止内存泄漏而被击败。无论如何,最终还是通过一个简单的gc来完成这项任务。
使用(add | push | pop | remove)PopableEventListener扩展(添加|删除)EventListener,使代码更改变得微不足道。允许我将监听器推送到任何级别 - 除了启用/禁用之外,还可以进行表单上下文更改。
来源:http://code.google.com/p/chess-spider/source/browse/http/scripts/popable.js
与我所看到的大多数情况相反,在dom中访问监听器的能力将是一项重大的好处。除了能够理智地禁用重新启用之外,将它们强制进入不同范围的能力将非常有用。
答案 0 :(得分:1)
为什么不将每个onclick的启用状态保存到数组中,然后在每次调用时检查该数组,如果状态为false,只返回而不运行任何内容,这也可以帮助跟踪灰化的内容。
以下是我的想法:http://jsfiddle.net/mazzzzz/MXEjv/1/ 它有点乱,但两个顶级功能是重要的。第一个将切换(基于类),第二个将说明元素的onclick是否已启用(再次按类)。只要确保对象具有相同的类,一个将影响另一个,反之亦然。或者,你可以传入id,而不是使用类(就像我做的那样) 希望有所帮助。
答案 1 :(得分:1)
我认为你在谈论添加和删除监听器。您可以通过多种方式执行此操作,如果您只有一个事件侦听器,则最简单的方法是将其添加为元素的属性。要删除它,只需指定null:
function sayHi() {
alert('hi');
}
// Add a listener
var someElement = document.getElementById('someElementID');
someElement.onclick = sayHi;
// Remove it
someElement.onclick = null;
如果事件需要多个侦听器,则可以使用其他方案,例如 addEventListener 和 attachEvent
当然,你可以只跟踪元素的状态(例如在类或对象中),然后监听器可以根据状态做出响应。
答案 2 :(得分:1)
课程怎么样?像
这样的东西function act(e) {
var target = e.currentTarget;
if (target.className === 'active') {
//element active, disable it
target.className = 'disabled';
//other stuff
}
else if (target.className === 'disabled') {
//element disabled, enable it
target.className = 'active';
e.preventDefault();
//other stuff
}
}
elem.onclick = act;
您也可以勇敢并使用data-*
属性(link)
答案 3 :(得分:1)
处理数百个触发器的最佳方法是使用event delegation。
然后检查每次点击是否与您的触发器匹配。如果它是禁用部分的孩子,则放弃点击。
jQuery实现如下所示:
$('.trigger', document.body).live('click', function(e) {
var target = $(e.target);
if (target.parents('.disabled').length > 0) {
// handle click
}
});
显然,您可以使用其他框架或纯JavaScript,最适合您。