js,为什么我在移除对象数组中的每一个对象的click事件时,只有最后一个对象移除成功?下有详细

图片说明
首先我创建一个数组
图片说明
然后写一个函数
图片说明
图片说明
图片说明
然后在一个方法里面创建一个名为marker的对象,为这个对象附上click事件,然后添加到数组中去。
图片说明
之后再在另外一个方法遍历整个数组,把里面每一个对象的click事件都清除掉
图片说明

图片说明
我调用两次方法也就是创建了两个marker对象,然后对他们进行移除,第一个对象的click里面还是有内容的,它也确实能响应这个事件,而第二个的click没有内容了。为什么会这样呢?我错在哪里?
希望大家不吝赐教!

5个回答

这个应该是属于事件冒泡,你这个处理事件传递给另一个方法去处理,所以导致你这个方法一直往上走,所以传递到最后一个去执行。
但是你如果绑定这个点击事件回调函数没有使用闭包的话,那这里就直接绑定到最后一个,其他的无法绑定
希望能够帮助到你

mango_love
mango_love 回复m0_37676512: 你可以在debug一下,看看代码运行的情况,有没有每个都绑定了
一年多之前 回复
m0_37676512
龙猫12138 原来是这样,我也觉得是闭包的问题,但就是想不出为何
一年多之前 回复

因为只绑定了最后一个事件

m0_37676512
龙猫12138
一年多之前 回复

这个是属于for循环的问题 你如我下面写的那样写应该就好了 for( var i = 0; i < markerArray.length; i++ ) {
( function(i) {
markeArray[i].removeEventListener("click", _openWindow);
} )(i);
}

替换成 let 试试?或者用闭包试一下~

你的描述和你的截图不符,你截图里面i都是=2的。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
对象移除最后一个
例如 :var  a=["A","B","C","D","E","F","G"]   移除最后一个即:a.pop();
js移除对象元素
for(var key in data){ delete data[key]; } for(var i=0;i&lt;data.length;i++){ delete data[i]["name"]; }
jquery移除click事件
首先,在html重定义click事件有两种方式,针对这两种方式有两种移除click事件的方法 1、第一种定义click时间的方法是在标签内部加上onclick的属性如下 &amp;lt;input id = &quot;demoId&quot; type=&quot;button&quot; onclick=&quot;demoFunction();&quot; value=&quot;单击事件&quot;/&amp;gt; 针对这种定义方式,onclick是input标签的一个属性,...
如何把Button的Click事件移除?
如何把Button的Click事件移除?rn窗口form1上有一个Button,如何把Button的Click事件与一个已知的事件绑定,并移除原来的事件(不知道是否有事件,如有也不知道名称)?rn如:rnprivate void RemoveEvent(object sender, System.EventArgs e)rnrn MessageBox.Show("这是新的事件");rnrnrnrnthis.button1.Click+=new System.EventHandler(RemoveEvent);
事件移除只能移除一次,为什么?
重写一文本控件:rn protected override void OnKeyDown(KeyEventArgs e)rn rn base.OnKeyDown(e);rnrn if (e.KeyCode == Keys.Down)rn rn if (this.gridRow == null || this.gridRow.Length == 0) return;rn this.TextChanged -= new EventHandler(GridTextBox_TextChanged);rnrnrn rn else if (e.KeyCode == Keys.Up)rn rn if (this.gridRow == null || this.gridRow.Length == 0) return;rn this.TextChanged -= new EventHandler(GridTextBox_TextChanged);rnrn rn elsern rn this.TextChanged += new EventHandler(GridTextBox_TextChanged);rn rn rnrn void GridTextBox_TextChanged(object sender, EventArgs e)rn rn SetGridDataSource(this.Text);rn rn程序意图是 当按上下键的时候 不要激发GridTextBox_TextChanged 事件 而按其它键的时候激发  但是只能移除一次事件,不知道是为什么?也就是当按上下方向键后按下其它键 再按方向键 事件却没有被移除 是怎么回事哦
js移除数组中的元素
js移除数组中的元素 题目描述 移除数组 arr 中的所有值与 item 相等的元素。不要直接修改数组 arr,结果返回新的数组 输入例子: remove([1, 2, 3, 4, 2], 2) 输出例子: [1, 3, 4] function remove(arr, item) { var arr2=new Array();
js中移除空白节点
//移除空白节点,空白节点的类型是3 function removeWhiteNode(node) { for (var i = 0; i if (node.childNodes[i].nodeType === 3 && /^\s+$/.test(node.childNodes[i].nodeValue)) { node.childNodes[i].parentNode.removeCh
移除DOM树中的对象
自己写屏蔽小广告的功能时会用到。挂上油猴,跑的也是爽爽的。或者直接按 F2 启动开发人员工具。 找到右上角的 >_ 点击打开控制台。 在下方 Console 内就可以输入 js 并执行了。//移除DOM树中的对象 function removeNodeById(nodeId) { var my = document.getElementById(nodeId); if (my
移除Object对象问题
var obj.rows = new Object();rnobj.rows["aa"]=123;rnrn问题一:请问我如何把obj下的rows下的所有对象动态移除呢?rnrnrnvar obj = new Object();rnobj["aa"]=123;rn问题二:如何移除obj下的aa对象?rnrn
js中如何移除定时器
定时器一般有两个 1)setTimeout();//n毫秒后执行一次 2)setInterval();//每隔n秒执行一次 这两个方法都有个返回值,返回一个定时器id,可以定义一个变量接收 清除定时器方法: setTimeout()对应的是 clearTimeout(id); setInterval()对应的是 clearInterval(id);
JS移除数组中重复数据
&amp;lt;script&amp;gt; var arrs = [&quot;11&quot;,&quot;22&quot;,&quot;33&quot;,&quot;44&quot;,&quot;55&quot;,&quot;666&quot;]; function unq(arrs ) { var result = [], hash = {}; for (var i = 0, elem; (elem = arr[i]) != null; i++) { if (!hash[elem])
threejs移除对象
this.removeCube = function(){ var allChildren = scene.children; var lastObject = allChildren[allChildren.length-1]; if(lastObject instanceof THREE.Mesh){ ...
还是对象移除
imgedit 控件里只有addobject 却没有对应的removeobject方法,那么以添加的对象用什么办法删除 ?
Js 移除Array中的数据
PhotoUrlArray.splice(index,1);
js移除数组中元素
题目描述 移除数组 arr 中的所有值与 item 相等的元素。不要直接修改数组 arr,结果返回新的数组 filter function remove(arr, item) { return arr.filter(function(cur,index,src){ if(cur === item){ return false } ...
js 移除指定元素
//需移除的元素 var removeItem = $(this).attr("id"); selectedShop = $.grep(selectedShop, function(value) { return value != removeItem; });
js 数组移除元素
1从数组的尾部移除元素 1)使用.pop()方法,改变原数组 var arr = [1,2,3]; var arr1 = arr.pop(); arr    //输出[1, 2] arr1 //输出 被移除的元素 3 2从数组的头部移除元素 1)使用.shift()方法,改变原数组 var arr = [1,2,3]; var arr1 = arr.shift(); a
JS动态移除div
在写这个函数时出现了很多问题,使用下面这种写法时发现只有第一次的移除是准确的,后面会移除第i-1个盒子。 function remove(){ var yes = document.getElementsByClassName('yes'); var body = document.getElementById('body'); var num = body.children...
js事件绑定与移除
[code=HTML]rnrnrnrn rn 无标题文档rnrnrnrn assrnrn rnrnrn[/code]rn我在p上绑定了一个click事件,在点击之后会移除这个事件,在FF、chorme中可以实现,但是在IE、opera中不能移除事件,请问这是为什么?怎么解决?
JS 移除字符
有两个字符串比如str1=1,2,3,4,5,6,7,8 str2=5,6,7rn想把str2中所包含的字符从str1中去除掉!剩下的字符串应该是str3=1,2,3,4,8rn请教高手
js移除元素
1.隐藏法: document.getElementById(&quot;aaa&quot;).style.display=&quot;none&quot; 2.真正移除: function delDiv() { var div=document.getElementById(&quot;aaa&quot;); div.removeNode(true); }  ...
angularjs移除对象集合中的某一个对象
&amp;lt;table class=&quot;table table table-striped table-condensed table-bordered&quot;&amp;gt; &amp;lt;tbody&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;th&amp;gt;项次&amp;lt;/th&amp;gt; ...
js移除tbody问题?
[code=HTML]rn rn rn rn AAAArn rn rn BBBBrn rn rn rn rn rn rn rn rnrn rn[/code]rnrnrn为什么添加可以 删除出错呢?
js移除属性
一、效果 代码 &amp;lt;style&amp;gt; div{ width:100px; height: 100px; background-color: red; } .clsP{ background-color: #00FF00; } &amp;lt;/style&amp;gt; &amp;lt;body&amp;gt; &amp;lt;input type=&quot;button&quot; value=...
js编程:移除数组元素
移除数组 arr 中的所有值与 item 相等的元素,直接在给定的 arr 数组上进行操作,并将结果返回 输入例子:removeWithoutCopy([1, 2, 2, 3, 4, 2, 2], 2)输出例子:[1, 3, 4]这次是要改变数组了,那就直接用splicefunction removeWithotCopy(arr,item){ for(var i=0;i<arr.length;i
【JS】移除元素 #数组
给定一个数组 nums 和一个值 val,移除所有数值等于 val 的元素,返回数组的新长度 给定 nums = [3,2,2,3], val = 3 输出: 2 给定 nums = [0,1,2,2,3,0,4,2], val = 2 输出: 5 你可以在原地修改输入数组并在 O(1) 额外空间的条件下完成吗 解法一: Object.splice(index, itemx) 移除元素 va...
JS——事件的追加与移除
一、事件的追加 第一种方法: &lt;script type="text/javascript" &gt; //1、追加 //传一个func方法进去,追加方法 var appendLoad = function (func) { //先从window.onload中把oldfunc取出来 ...
怎样移除listbox最后一项?
不是在选中后移除....rnrn移除刚添加进去的项
js,为什么一个对象也能用下标去访问?下有详细
n我在查询“如何对一个对象数组去重复”的时候,见到了这样的代码n![图片说明](https://img-ask.csdn.net/upload/201807/26/1532589711_279055.png)n我想问的是,result是一个对象,song某一位的name是一个字符串,为什么写 result[songs[i].name]=songs[i];这样的语句可以在result对象里面添加一个属性。n以下是原文地址nnhttps://www.jianshu.com/p/131ca13e7f28
CPtrArray在移除时出现问题
CPtrArray cpa;rnrnint count = cpa.GetSize();rnrnfor(int i = 0; i < count; i++)rnrn cpa.RemoveAt(i); [color=#FF0000]//1.这样处理会出问题[/color] rnrn或:rnrnfor(int i = count -1; i >= 0; i--)rnrn cpa.RemoveAt(i);//[color=#FF0000]2.这样是没问题的[/color]rnrnrn上面用红色标注的两句,实在是不明白为什么会出现这样的问题, 貌似上面一句没有越界问题,如果只能用下面那句,那么如果我想从第一项删除时岂不很麻烦?
win10 uwp 如何判断一个对象被移除
有时候需要知道某个元素是否已经被移除,在优化内存的时候,有时候无法判断一个元素是否在某个地方被引用,就需要判断对象设置空时是否被回收。 本文告诉大家一个简单的方法判断对象是否被移除
jQuery学习笔记之移除DOM对象
.empty() 从DOM对象中移除匹配元素集合的所有子节点,这个方法不接受任何类型的参数。 这个方法不仅移除子元素和后代元素,也移除匹配元素集合中的任意文本内容。这是因为在DOM对象中,元素内部的任意文本字符串被认为是这个元素的子节点。 为避免内存泄漏,jQuery在移除元素本身之前会先移除该元素上的数据和事件处理 如果你想在移除元素的同时不销毁它的数据或事件处理,可以使用.detach...
jquery为a标签添加和移除onclick事件
移除onClick事件: $("#addFam").removeAttr("onclick"); 添加onClick事件: $("#addFam").attr("onclick","addFamily();"); addFam 为a标签id属性值
移除list集合中指定对象
1.使用了list.remove(obj),没有效果; 2.使用了removeAll也不起作用: List&amp;lt;User&amp;gt; userRemove = new ArrayList&amp;lt;User&amp;gt;(); //找出要删除的用户 for (User result : list) { if (result.getId...
js使用getEventListeners移除事件监听器
getEventListeners函数可以用来获取一个dom元素的事件侦听器。 如:getEventListneres(wiondow).load 会返回一个侦听window.load事件的侦听器数组。 可以调用一个侦听器的remove方法来移除一个侦听器。 如 getEventListneres(wiondow).load[0].remove()可以移除第一个侦听器。其他以此类推。
js 添加 移除 替换 插入
添加、移除、替换、插入 appendChild() //添加 removeChild() //移除 replaceChild() //替换 insertBefore() //插入 window.onload=function(){ // var box=document.getElementById("box"); //添加 appendChild() 先用createEle
动态加载、移除、替换js/css文件
本文简单介绍动态加载、移除、替换js/css文件 。有时候我们在写前端的时候,会有出现需要动态加载一些东如css js 这样能减轻用户加载负担,从而提高响应效率。下面贴出代码。   //动态加载一个js/css文件 function loadjscssfile(filename, filetype){ if (filetype=="js"){ varfileref=document.
js怎么移除事件不成功
[code=javascript]rnrn rnrn[/code]rnrnrn按了b4按钮,什么反应都没有,按道理只移除了b4的f1事件函数,为什么没有执行f2函数呢。如果将removeEvents(b4,"click",f1);这句去掉后,按b4按钮f1和f2函数都会运行。
JS移除表单指定行
做了一个表单,每行后面有个BUTTON,BUTTON的ID属性是每条记录的ID,按了BUTTON按钮后会弹出来一个DIV框,DIV框里面有个提交按钮,当点了提交按钮AJAX做完更新数据库后,想把对应行的记录从页面上移除,但是每条记录的ID已经被BUTTON用了,想问问还有什么其他办法可以获得TR的属性和获取该属性的方法!谢谢
js 数组移除指定元素
var arr=['hanlu','haha','hl']var index=arr.indexOf('hl');arr.splice(index,1)arrvar index = typeValue.indexOf($(this).attr('data-value'));typeValue.splice(index, 1);
相关热词 c# 标准差 计算 c#siki第五季 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池