草庐IT

侦听器

全部标签

javascript - React 为什么我应该删除事件监听器?

我看到很多这样的代码:componentDidMount(){//addeventlistener}componentWillUnmount(){//removeeventlistener}我知道如果监听器设置在像window这样的全局对象上,但如果它只是在组件内即将被卸载的HTML元素上,那么监听器是否会随着组件一起消失? 最佳答案 由于以下原因需要删除事件监听器。如果浏览器处理不当,请避免内存泄漏。现代浏览器会垃圾收集已删除DOM元素的事件处理程序,但在IE等旧版浏览器中并非如此,这会造成内存泄漏。避免组件事件的碰撞。这是一个很

javascript - 向 iframe 添加事件监听器

是否可以向iframe添加事件监听器?我试过这段代码,但它似乎不起作用:document.getElementsByTagName('iframe')[0].contentWindow.window.document.body.addEventListener('afterLayout',function(){console.log('works');});我也刚刚尝试使用通过id获取元素并通过我正在使用的JavaScript框架添加我的监听器,如下所示:Ext.fly("iframeID").addListener('afterLayout',function(){alert('te

javascript - 添加事件监听器,for(),索引。如何使用闭包?

这个问题在这里已经有了答案:JavaScriptclosureinsideloops–simplepracticalexample(44个答案)JavascriptinfamousLoopissue?[duplicate](5个答案)关闭9年前。我有这个代码:varitems=this.llistat.getElementsByTagName('a');for(vari=0;i事件被监听,但有3项并且警报始终在任何元素上打印3(它不考虑索引),难道items[i]不应该作为闭包来完成工作吗?谢谢!

javascript - JavaScript 和/或 jQuery 中的函数监听器

想知道是否有一种优雅的方式来监听JavaScript和/或jQuery中的函数。与其监听$('#mything').click(function(){//blah}),我更想监听特定函数何时被触发。我不想编辑该函数,因为它位于我不想直接破解的库中。我确实找到了这个:http://plugins.jquery.com/project/jqConnect连接函数。但想知道更好的技术。 最佳答案 做到这一点的唯一方法是覆盖函数(即破解库):(function(){varoldVersion=someLibrary.someFunction

javascript - CSS/Javascript - "display:none"是否暂时删除任何关联的事件监听器?

我考虑的更多是效率。如果我选择将元素的显示设置为none,javascript会继续监听附加到它的事件,还是暂时删除它们直到恢复显示? 最佳答案 这取决于发生的事件类型。让我们尝试使用click事件:$(function(){//Let'sattachanevent.$("#eventContainer").click(function(){$("#eventAffected").html("Ichanged.");});//Thiswillhidethecontainersurelywhenyouclick.$("#hide-co

javascript - 为多个元素添加事件监听器

我已经为此苦苦挣扎了几个小时。我想为所有添加一个事件监听器s在一个页面上,到目前为止我已经得到了这段代码:onload=function(e){sels=document.getElementsByTagName('select');for(i=0;i这只会在页面加载时触发警报,而不会在我更改任何中的值时触发警报请问我可以向正确的方向轻推吗?:-) 最佳答案 当您在示例中立即调用alert()函数时,您需要为此设置匿名函数:....addEventListener('change',function(){alert('test!')

javascript - JSF/PrimeFaces ajax 更新打破了 jQuery 事件监听器函数绑定(bind)

我正在使用jQuery为HTML中的每个input注册一个change事件监听器,如下所示://如果用户更改myTextarea的内容,则会触发两个change事件。然而,在按下更新按钮后,部分更新了myTextarea,之后只有changeHandler被触发。$(document).ready()中绑定(bind)的事件不再触发。这是PrimeFaces相关的和/或预期的行为吗?如果是,那么我如何确保在不重新运行文档就绪脚本的情况下触发第二个事件。 最佳答案 至于问题的原因,ajax请求将使用来自ajax响应的新HTML元素更新

javascript - 使用事件监听器克隆 Bootstrap 元素

我正在尝试克隆一个具有Bootstrap提供的数据切换行为的Bootstrap元素:HTMLclickherefoo克隆后,我将div的ID更改为新的唯一ID,并将按钮的data-target更改为指向新的div。JSvarheader=objectContainer.clone(true);varcounter=this.collapsibleObjCounter++;varcollapseId="collapsible_obj_"+counter;header.find(".collapse").attr("id",collapseId);header.find("button[d

javascript - 检查组件是否附加了事件监听器

假设有一些零件。它可以用@cancel调用附加到它的事件监听器,如果是这样,我想显示触发此事件的取消按钮。如果没有@cancel事件,取消按钮不应该可见。有没有办法检查组件是否附加了事件监听器?目前我这样做:Cancel然后这样调用它:要么是否可以在不使用任何附加属性(如cancelEventPassed)的情况下实现此目的?? 最佳答案 当有监听器附加到组件时,它们在组件的$listeners属性中可用。您可以使用该属性来确定特定监听器是否可用。例如,这里有一个计算属性,用于检查是否存在cancel监听器。computed:{ha

javascript - jQuery $el.trigger ('change' ) 不会触发 native 监听器

考虑以下HTML:o1o2和JavaScript(在文档就绪时执行):var$select=$('select');varselect=$select.get(0);functionlogger(msg){returnfunction(){console.log(msg);};}$select.on('change',logger('jqueryonselect'));$(document).on('change',logger('jqueryondocument'));select.addEventListener('change',logger('nativeonselect'),