Обработчик событий не может получить доступ к методу объекта в JavaScript - PullRequest
1 голос
/ 05 февраля 2010

Как я могу получить доступ к методу util.log () из статического обработчика html-событий?

Другими словами, когда я нажимаю флажок, мне нравится вызывать метод util.log.

onclick = "util.log (\ 'hey \')" <- как переписать здесь функцию события? </p>

Я знаю, что все ответы здесь верны, но возможно ли получить доступ к локальным методам при вставке html во innerHTML?

спасибо

var utilities = function() {
 var util = this;

 util.log = function(msg){
  alert(msg);
 };

 var p = document.createElement('p');
 p.innerHTML = '<input type="checkbox" onclick="util.log(\'hey\')" value="1">Check me'; 
 // this part has to be plain html, because there is this table generator class 
 // will insert this to cell as innerHTML. That's why I can't change the table class. 
};

Ответы [ 2 ]

2 голосов
/ 05 февраля 2010

Ваш util объект не находится в глобальной области видимости; он спрятан внутри объекта utilities. Обработчик нажатия будет работать в области видимости глобального объекта, поэтому он вообще не видит util.

Если вы не можете изменить способ создания строк HTML, вам нужно объявить util вне функции utilities, другими словами, просто так на странице:

 var util = {};
 util.log = function(msg){
  alert(msg);
 };

 var p = document.createElement('p');
 p.innerHTML = '<input type="checkbox" onclick="util.log(\'hey\')" value="1">Check me'; // this part is a legacy code and I have no control over to rewrite it as HTMLObjectElement way
1 голос
/ 05 февраля 2010

попробуйте этот JavaScript вместо:

var util = {
 log : function(msg){
  alert(msg);
 };
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...