问题与document.removeEventListener()

时间:2019-03-18 03:06:12

标签: javascript events event-handling addeventlistener

我有一个创建事件监听器的函数:

document.addEventListener(name, handler.bind(null, name, callback), false);

我使用.bind传递额外的参数,但是当我尝试删除它时:

document.removeEventListener(name, handler, false);
// or
document.removeEventListener(name, handler.bind(null), false);

没有实际被删除。我已经尝试了各种修复程序,但似乎无法使其正常工作。

2 个答案:

答案 0 :(得分:5)

您需要保存对绑定函数的引用,以便以后可以使用它来调用<tr><th><label for="id_type_of_relation">Type of relation:</label></th><td><select name="type_of_relation" required multiple="multiple" id="id_type_of_relation"> <option value="1" selected>Familliar</option> <option value="2">Mate</option> <option value="3" selected>Friend</option> <option value="4">Husband</option> <option value="5">Wife</option> <option value="6">Son</option> <option value="7">Daughter</option> <option value="8">Mother</option> <option value="9">Father</option> <option value="10">Sister</option> <option value="11">Brother</option> <option value="12">Grandmother</option> <option value="13">Grandfather</option> <option value="14">Granddaughter</option> <option value="15">Grandson</option> <option value="16">Relative</option> <option value="17">Colleague</option> <option value="18">Partner</option> <option value="19">Mentor</option> <option value="20">Pupil</option> <option value="21">Provider</option> <option value="22">Customer</option> </select></td></tr>

removeEventListener

答案 1 :(得分:0)

  

EventTarget.removeEventListener()方法从EventTarget中移除一个先前在EventTarget.addEventListener()中注册的事件侦听器。 要删除的事件侦听器是使用事件类型,事件侦听器函数本身 和可能影响匹配过程的各种可选选项的组合来标识的。

>

使用Function#bind时,bind()方法创建一个新函数,该函数在被调用时将其this关键字设置为具有给定序列的给定值调用新函数时提供的所有参数之前的参数。

因此,在使用removeEventListener时,您不会传递与为addEventListener添加的功能相同的引用。

已将Handler function缓存在一个变量中,该变量可同时用于addEventListenerremoveEventListener

let handlerFunction = handler.bind(null, name, callback);
document.addEventListener(name, handlerFunction, false);
document.removeEventListener(name, handlerFunction, false);