在javascript中覆盖事件侦听器

时间:2018-05-16 11:48:30

标签: javascript

我试图在点击更改事件按钮后覆盖添加按钮的事件处理程序以进行更新。但代码无效

import itertools
from setuptools import setup, Extension
from distutils.command.build import build as build_orig


def partition(pred, iterable):
    t1, t2 = itertools.tee(iterable)
    return itertools.filterfalse(pred, t1), filter(pred, t2)


class build(build_orig):

    def finalize_options(self):
        super().finalize_options()
        condition = lambda el: el[0] == 'build_ext'
        rest, sub_build_ext = partition(condition, self.sub_commands)
        self.sub_commands[:] = list(sub_build_ext) + list(rest)


setup(
    ...,
    cmdclass={'build': build},
)
let vc = UIActivityViewController(activityItems: [storeurl], applicationActivities: [])

self.present(vc, animated: true, completion: nil)

当我点击添加document.getElementById("test").addEventListener("click",function(){ add(); document.getElementById("change_event").value="Now change the event"; document.getElementById("change_event").style.display="block"; }); document.getElementById("change_event").addEventListener("click",function(){ document.getElementById("test").value="Update"; document.getElementById("change_event").style.display="none"; document.getElementById("test").addEventListener("click",function(){ update(); }); }); function add(){ alert("Add"); } function update(){ alert("Update"); }功能时会调用。当我点击<input type="button" value="add" id="test" name="add"> <input type="button" name="change_event" style="display: none" value="change Event" id="change_event"> 更新按钮时,点击更新按钮后,必须调用更新功能。

我的问题是,第一次更新按钮调用add()功能。 当我点击更新时,只能调用Now change the event

2 个答案:

答案 0 :(得分:1)

添加事件时,它们相互堆叠,意味着您可以在同一元素上有多个点击事件,因此它们不会互相覆盖。您必须先使用removeEventListener删除上一个事件,然后再分配新事件

var eventWithAdd = function(){
    add();      
    document.getElementById("change_event").value="Now change the event";
    document.getElementById("change_event").style.display="block";

}

...

document.getElementById("test")
    .removeEventListener('click', eventWithAdd)
    .addEventListener('click', function () {update()});

答案 1 :(得分:0)

您应该使用removeElementListener()取消注册add()函数并注册update()函数:

&#13;
&#13;
document.getElementById("test").addEventListener("click", eventListenerAdd);
document.getElementById("change_event").addEventListener("click", eventListenerUpdate);

function eventListenerAdd(){
    add();      
    document.getElementById("change_event").value="Now change the event";
    document.getElementById("change_event").style.display="block";

};


function eventListenerUpdate(){
    document.getElementById("test").value="Update";
    document.getElementById("change_event").style.display="none";
    document.getElementById("test").removeEventListener("click", eventListenerAdd);
        document.getElementById("test").addEventListener("click",function(){
            update();       
        });   
};

function add(){
    alert("Add");
}
function update(){
alert("Update");    
}
&#13;
<input type="button" value="add" id="test" name="add">
<input type="button" name="change_event" style="display: none" value="change Event" id="change_event">
&#13;
&#13;
&#13;

如您所见,您需要将Eventlisteners作为具有名称的实际函数添加,以便将其删除。