DrunkMaster
@DrunkMaster

В чём ошибка с присвоением переменно функции?

Так всё работает https://jsfiddle.net/w14e1t8f/
Так не работает https://jsfiddle.net/sr8nos0o/

Код не работающей функции:
myid.onclick = Main(e);
  
  var Main = function(e) {
  
    var Run1 = function(id){ alert('событие1');    }
    var Run2 = function(id){ alert('событие2');    }
    
    if(e.isTrusted === true){
        Run1(1);
    }
    else {
        Run2(2);
    }
  }

Ошибка Uncaught ReferenceError: e is not defined да я понимаю что он пишет что не видит события и не может передать его в функцию, но как это поправить?
  • Вопрос задан
  • 115 просмотров
Решения вопроса 1
Ifelseapps
@Ifelseapps
Frontend developer/JavaScript developer
1)Вам нужно присвоить myid.onclick ссылку на функцию Main. При вызове обработчика туда будет передан параметр - объект события.
2)Как было сказано выше, у Вас функция определяется через function expression, поэтому использовать ее можно только после определения.

Вот, что должно получиться:
var Main = function(e) {
  
    var Run1 = function(id){ alert('событие1');    }
    var Run2 = function(id){ alert('событие2');    }
    
    if(e.isTrusted === true){
        Run1(1);
    }
    else {
        Run2(2);
    }
    
  };
  
  myid.onclick = Main;


P.S. Не рекомендовал бы Вам использовать подобный способ подписки на событие, т.к., если мне не изменяет память, при таком подходе Вы можете определить только один обработчик данного события для данного элемента (и затрете обработчики, которые могли быть определены до этого). Предпочтительнее использовать addEventListener.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
EreminD
@EreminD
Кое-что умею
потому что вы сначала вызываете функцию через переменную
а только потом ее определяете (var Main = function(e))
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы