添加另一个js文件中存在的方法的事件侦听器

时间:2017-02-22 10:05:52

标签: javascript jquery html5 d3.js

我正在访问在另一个js文件中编写的几个方法。所以我这样访问它们:

文件1:

function minit() {
  this.addval = function(val1, val2) {
    return val1 + val2;
  }

  function autoexecute(d) {
    //do something here//
    //raise event//
  }
};

file2的:

var con = new minit();
var result = con.addval(2, 3);

/*
con.autoexecute(function(d) { //Wanna do something like this
  alert(d);
});
*/

以上事情按预期工作,得到结果.. 现在,假设autoexecute(d)方法在一段时间后自动调用。我如何知道该方法是否已执行?

这样,我想在autoexecute(d)(在file1中)创建一个事件(在file2中)。

更新 我希望这个例子能帮助你理解这个问题。

company.js //这是主要文件,将在 ui.html中用作参考

function hello(personname) { //this method will invoke automatically after 1 minute..

}

ui.html

<script src="company.js"></script>
<script>
  $(document).ready(function() {
    function bye(personame) { //this method will be called automatically if hello method invoked.... personame is the argument passed from hello method//

      alert("comany.js -> hello function is executed");
    }
  });
</script>

2 个答案:

答案 0 :(得分:1)

如果函数具有相同的范围,则只能执行此操作(全局范围是最佳情况)。如果自动执行功能具有本地范围,则您无法执行此操作。

实质上,像这样覆盖原始函数......

// keep a reference to the original function
var _autoexecute = autoexecute;

// override the original function with your new one
function autoexecute(d) {
    alert("before autoexecute");  // fired before the original autoexecute
    _autoexecute(d);              // call the original autoexecute function
    alert("after autoexecute");   // fired after the original autoexecute
}

现在,每当调用autotexecute时,它将调用您的新函数,它可以处理事件之前和之后,以及调用原始函数。只需删除(可怕的)警报,并根据需要替换事件处理程序。

答案 1 :(得分:0)

据我所知,有人应该纠正我,如果我错了,没有办法(至少没有一些库)来检测在javascript中被触发的函数。函数执行不会触发其他函数可以“处理”的事件。

在你的例子中,你想要一个函数在另一个函数被触发后自动触发,你需要做的就是在第一个被“触发”的函数结束时调用你要触发的函数。令人困惑,但希望这会有所帮助。

function handler(){
  alert("main function was fired!");
}
function main(){
  //Code of main goes here and then at the end just add:
  handler();
}

现在当你的“主”完成它的工作时,它将调用handler函数。

无论您在何处定义处理程序函数(可以是不同的文件或同一文件),只要它可以在main的范围内访问,它就会在它结束时触发。它甚至可以在声明main之后声明,只要在main被触发之前声明它。