调用另一个函数时运行函数

时间:2017-02-20 03:07:51

标签: javascript jquery

我想知道在调用另一个函数时如何运行函数。 addEventListener仅运行“click”,“mouseover”等事件。但是,我想监听进行函数调用。

实例:
调用功能1 。之后, Function 2 运行,因为它看到 Function 1 被调用。

对于简单函数而不是事件,是否有addEventListener替代方法?我似乎找不到任何东西。

我的目标是每当用户执行某些操作时简单地运行一个函数,例如当jQuery或其他JavaScript库中隐藏某些内容时,或者只是添加了一些代码时的另一个外部JavaScript文件。

3 个答案:

答案 0 :(得分:5)

介绍一种非常黑客的方式

由于您要实现的目标基本上是破解现有系统(如果您能控制双方并正确设计代码,则不应该遇到此问题。)

看起来您的函数也是全局声明的。在这种情况下: 1.将现有函数存储在变量中 2.用你的实现覆盖该功能 3.在开始时调用函数变量

function myFunction(){
    //This is the main function
    alert('Hello, this is part of the message!');
}

var tempfunc = myFunction;

window.myFunction = function() {
    tempfunc();

    // do what you need to do in the event listener here
    alert('Hello, this is the other part of the message!');
}

编辑:

原始问题要求原始功能无法修改,因此我的解决方案。因为它们似乎已经改变了。

答案 1 :(得分:2)

您将在CBCentral内触发一个事件并听取该事件。

myFunction
function myFunction(){
    //This is the main function
    alert('Hello, this is part of the message!');
    // trigger the event
    var event = new CustomEvent("event", { "detail": "Example of an event" });
    document.dispatchEvent(event);



}
// handle here;
document.addEventListener("event", function(){
    //This is the secondary function
    //or the function I need to run after the main function is called
    alert('Hello, this is the other part of the message!');
});
// call main
myFunction();

答案 2 :(得分:0)

  

对于简单函数是否有addEventListener替代方法而不是   事件?我似乎无法找到任何。

     

我的目标是每次用户做某事时都运行一个函数   喜欢在jQuery或其他人隐藏某些东西的时候   JavaScript库或只是另一个外部JavaScript文件   我添加了一些代码。

您可以使用jQuery.Callbacks()

var callbacks = $.Callbacks();

function handleCallback1(message) {
  console.log(message, this)
};

function handleCallback2(message) {
  if (this.tagName === "DIV") {
    this.style.color = "green";
  } else {
    this.nextElementSibling.style.color = "blue";
  }
};

$("button, div").on("click", function() {
  callbacks.fireWith(this, ["called from " + this.tagName])
});

callbacks.add(handleCallback1, handleCallback2);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
</script>
<button>click</button>
<div>click</div>