2017-02-22 9 views
1

Я получаю доступ к нескольким методам, написанным в другом файле js. Так что я к ним доступ, как это:Добавить прослушиватель событий метода, присутствующего в другом файле js

file1:

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) автоматически запускается через промежуток времени. Как я могу узнать, выполняется ли этот метод?

Так что, я хочу создать событие (в файле2) autoexecute(d) (в файле1).

UPDATE: Я надеюсь, что этот пример поможет вам понять этот вопрос ..

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> 
+0

Постарайтесь сделать это понятнее. – Dellirium

+0

Пожалуйста, проверьте, что я обновил основную тему .. –

+0

https://jsfiddle.net/tgjms546/ прочитал это – Dellirium

ответ

1

Вы можете сделать только тыс если функции имеют одинаковую область действия (глобальный охват - лучший сценарий). Если функция autoexecute имеет локальную область, то вы не сможете этого сделать.

В сущности, переопределить первоначальную функцию, как это ...

// 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 называется она будет вызывать новую функцию, которая может обрабатывать до и после событий, а также позвонив оригинал функция. Просто удалите (ужасные) предупреждения и замените обработчики событий по мере необходимости.

+0

@DavidM нет триггера, события нет. Любая функция в той же области, которая использовалась для ссылки на старое autoexecute, теперь ссылается на новую. – Dellirium

+0

Спасибо Арчер! Но как получить триггер _autoexecute в файле2? autoexecute - это глобальная функция ... теперь, как я могу заставить запускать триггер в файле2? поскольку autoexecute (d) находится внутри файла1 .. –

+0

Файлы неактуальны. Сфера важна. Вы пробовали это? – Archer

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.