Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中,是否可以保存一个点击触发并在以后重新应用它?_Javascript_Html_Dom_Javascript Events - Fatal编程技术网

在javascript中,是否可以保存一个点击触发并在以后重新应用它?

在javascript中,是否可以保存一个点击触发并在以后重新应用它?,javascript,html,dom,javascript-events,Javascript,Html,Dom,Javascript Events,动态页面。希望禁用并稍后重新启用节。从视觉上看,它们是灰色的,但需要防止用户在以后再使用该部分 对于使用点击触发器的元素,希望: 在属性中保存当前单击触发 删除当前的点击触发 添加没有默认值和门的触发器 要重新启用: 摆脱无默认触发器 重新应用以前保存的触发器 清除保存它的属性 从迄今为止的答复来看: 推测:使用纯javascript html5级别,没有委托或其他外部机制,不可能从元素中提取点击触发 解决方案 非常受委托的诱惑-由于无法防止内存泄漏而失败。最终还是用一个简单的gc完成了这

动态页面。希望禁用并稍后重新启用节。从视觉上看,它们是灰色的,但需要防止用户在以后再使用该部分

对于使用点击触发器的元素,希望:
  • 在属性中保存当前单击触发
  • 删除当前的点击触发
  • 添加没有默认值和门的触发器

要重新启用:
  • 摆脱无默认触发器
  • 重新应用以前保存的触发器
  • 清除保存它的属性

从迄今为止的答复来看:

推测:使用纯javascript html5级别,没有委托或其他外部机制,不可能从元素中提取点击触发


解决方案 非常受委托的诱惑-由于无法防止内存泄漏而失败。最终还是用一个简单的gc完成了这项工作

使用(add | push | pop | remove)PopableEventListener扩展(add | remove)EventListener,使代码更改变得微不足道。允许我将侦听器推送和弹出到任何级别—对于表单上下文更改来说都是非常好的,而不仅仅是启用/禁用

资料来源:

文件:

社论
与我所看到的大多数情况相反,能够在dom中访问侦听器将是一个巨大的好处。除了能够合理地禁用重新启用外,将它们强制到不同的作用域中的能力将非常有用。

为什么不将每个onclick的启用状态保存到一个数组中,然后在每次调用时检查该数组,如果状态为false,只需返回而不运行任何操作,这也有助于跟踪哪些内容是灰色的

以下是我的想法: 这有点混乱,但两个最重要的功能是。第一个将切换(基于类),第二个将说明元素的onclick是否已启用(同样是通过类)。只要确保对象具有相同的类,其中一个会影响另一个,反之亦然。或者,您可以只传入id,而不使用类(就像我所做的那样)。

希望这能有所帮助。

为什么不将每个onclick的启用状态保存到一个数组中,然后每次调用时检查该数组,如果状态为false,只需返回而不运行任何操作,这也可以帮助跟踪灰显的内容

以下是我的想法: 这有点混乱,但两个最重要的功能是。第一个将切换(基于类),第二个将说明元素的onclick是否已启用(同样是通过类)。只要确保对象具有相同的类,其中一个会影响另一个,反之亦然。或者,您可以只传入id,而不使用类(就像我所做的那样)。

希望这能有所帮助。

我想您是在谈论添加和删除侦听器。您可以通过多种方式实现这一点,如果一个事件只有一个侦听器,最简单的方法就是将其添加为元素的属性。要删除它,只需分配null:

function sayHi() {
  alert('hi');
}

// Add a listener
var someElement = document.getElementById('someElementID');
someElement.onclick = sayHi;

// Remove it
someElement.onclick = null;
如果一个事件需要多个侦听器,可以使用其他方案,如addEventListener和attachEvent


当然,您可以只跟踪元素的状态(例如在类或对象中),然后侦听器就可以根据状态进行响应。

我想您是在谈论添加和删除侦听器。您可以通过多种方式实现这一点,如果一个事件只有一个侦听器,最简单的方法就是将其添加为元素的属性。要删除它,只需分配null:

function sayHi() {
  alert('hi');
}

// Add a listener
var someElement = document.getElementById('someElementID');
someElement.onclick = sayHi;

// Remove it
someElement.onclick = null;
如果一个事件需要多个侦听器,可以使用其他方案,如addEventListener和attachEvent


当然,您可以只跟踪元素的状态(比如在类或对象中),然后侦听器就可以根据状态做出响应。

类呢?差不多

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-*
attributes()

那么类呢?差不多

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-*
attributes()

处理数百个触发器的最佳方法是使用

然后检查每次单击是否与触发器匹配。如果它是禁用节的子节,则放弃单击

jQuery实现如下所示:

$('.trigger', document.body).live('click', function(e) {
  var target = $(e.target);
  if (target.parents('.disabled').length > 0) {
    // handle click
  }
});

显然,您可以根据自己的需要使用其他框架或普通JavaScript。

处理数百个触发器的最佳方法是使用

然后检查每次单击是否与触发器匹配。如果它是禁用节的子节,则放弃单击

jQuery实现如下所示:

$('.trigger', document.body).live('click', function(e) {
  var target = $(e.target);
  if (target.parents('.disabled').length > 0) {
    // handle click
  }
});

显然,您可以使用其他框架或普通JavaScript,因为它们最适合您。

取决于您首先附加它的方式。请显示一些代码。缓存函数并使用
removeEventListener
不起作用?@Felix-通过元素附加。addEventListener('click',func,true)@Zirak-什么是“缓存函数”?在分配侦听器时,不要声明匿名函数,而是命名祝贺。看到答案,我想这不是你想要的最终效果。这取决于你最初是如何附加它的。请显示一些代码。缓存函数并使用
removeEventListener
不起作用?@Felix-通过元素附加。addEventListener('click',func,true)@Zirak-什么是“缓存函数”?在分配侦听器时,不要声明匿名函数,而是命名祝贺。看到答案,我想这不是你想要的最终效果。你的方法的问题是重新应用触发器:我需要跟踪每个元素的侦听器。这就是为什么我要先救它!您的方法的问题是重新应用触发器:我需要跟踪每个元素的侦听器。这就是为什么我要先救它@mazzzz-我想可以这样做,但有数百个触发器。有时相同的t