Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.05.2011, 18:28
Аватар для cmygeHm
Профессор
Отправить личное сообщение для cmygeHm Посмотреть профиль Найти все сообщения от cmygeHm
 
Регистрация: 12.10.2010
Сообщений: 196

onclick = object.method
Ребят, код упростил, проблема только в том месте где комментарий, в других местах синтаксические и прочие ошибки не ищите, все работает там.
Вот код:

function SimpleInput() {
    
    this.addSymbol = function(symb) {
	
	console.log(symb);
        
    }
}


function SimpleKeypad(inputObj) {

    this.inputObj = inputObj;
    this.html = '';
    this.create = function() {
        
        for (var i = 0; i < 10; i++) {
            
            this.html = this.html + "<div onclick='" + this.inputObj(i) +"; return false;' >"+ i + "</div>"; // вот здесь хочу чтобы привязался вызов функции, а она вызывается сразу при создании объекта. в html-коде же остается только onclick="undefined; return false;". Помню там какая-то тонкость при написании этой строчки, что-то да как-то надо в кавычки взять. Кстати, пока писал это вспомнил что делал ранее вызов метода объекта в setInterval и там эту тонкость и встречал. щас глянем.
        }
        
        document.getElementById('asdfasdf').innerHTML = this.html;
    }
    
}



$(document).ready(function(){
    SCR3_input = new SimpleInput();
    SCR3_input.create();
    SCR3_keypad = new SimpleKeypad();
    SCR3_keypad.create(SCR3_input);
});
Ответить с цитированием
  #2 (permalink)  
Старый 06.05.2011, 18:35
Профессор
Отправить личное сообщение для Matre Посмотреть профиль Найти все сообщения от Matre
 
Регистрация: 07.01.2011
Сообщений: 582

"<div onclick='this.inputObj(" + i + "); return false;'>"
Ответить с цитированием
  #3 (permalink)  
Старый 06.05.2011, 18:57
Аватар для cmygeHm
Профессор
Отправить личное сообщение для cmygeHm Посмотреть профиль Найти все сообщения от cmygeHm
 
Регистрация: 12.10.2010
Сообщений: 196

ммммммм.... помоему пробывал. но все равно перепроверю...
Ответить с цитированием
  #4 (permalink)  
Старый 06.05.2011, 21:24
Аватар для Amphiluke
   ☽
Отправить личное сообщение для Amphiluke Посмотреть профиль Найти все сообщения от Amphiluke
 
Регистрация: 07.01.2011
Сообщений: 254

В данном случае корректнее будет привязывать обработчик не через инлайновый атрибут onclick, а через Javascript-свойство onclick динамически создаваемого объекта HTMLDivElement. Или при помощи методов добавления слушателя.

Например,
function SimpleKeypad(inputObj) {
    this.inputObj = inputObj;
    this.html = '';
    this.create = function() {
        var div, frag = document.createDocumentFragment();
        for (var i = 0; i < 10; i++) {
            div = frag.appendChild(document.createElement("div"));
            div.onclick = (function(foo, j) { return function() { foo(j); }; })(this.inputObj, i);
        }
        document.getElementById('asdfasdf').innerHTML = "";
        document.getElementById('asdfasdf').appendChild(frag);
    }
}
Ответить с цитированием
  #5 (permalink)  
Старый 10.05.2011, 12:02
Аватар для cmygeHm
Профессор
Отправить личное сообщение для cmygeHm Посмотреть профиль Найти все сообщения от cmygeHm
 
Регистрация: 12.10.2010
Сообщений: 196

Вот это всяко правильнее, спасибо. А вот это
Цитата:
"<div onclick='this.inputObj(" + i + "); return false;'>"
не должно работать, так как this.inputObj не будет указывать на этот объект и его метод в момент, когда страница будет сгенерирована и выдана в браузер.
Ответить с цитированием
  #6 (permalink)  
Старый 10.05.2011, 15:14
Аватар для cmygeHm
Профессор
Отправить личное сообщение для cmygeHm Посмотреть профиль Найти все сообщения от cmygeHm
 
Регистрация: 12.10.2010
Сообщений: 196

Только не понятно что это за комбинация такая:
div.onclick = (function(foo, j) { return function() { foo(j); }; })(this.inputObj, i);
. зачем такая громоздкость, вместо
div.onclick = (function(foo, j) { return this.inputObj(j); });
и что это вообще обозначает ???

Последний раз редактировалось cmygeHm, 10.05.2011 в 15:17.
Ответить с цитированием
  #7 (permalink)  
Старый 10.05.2011, 18:18
Аватар для cmygeHm
Профессор
Отправить личное сообщение для cmygeHm Посмотреть профиль Найти все сообщения от cmygeHm
 
Регистрация: 12.10.2010
Сообщений: 196

Сообщение от cmygeHm Посмотреть сообщение
Только не понятно что это за комбинация такая:
div.onclick = (function(foo, j) { return function() { foo(j); }; })(this.inputObj, i);
. зачем такая громоздкость, вместо
div.onclick = (function(foo, j) { return this.inputObj(j); });
и что это вообще обозначает ???
Блин понятно, первый раз встречаю такое: http://www.sql.ru/forum/actualthread.aspx?tid=577072
Ответить с цитированием
  #8 (permalink)  
Старый 10.05.2011, 21:09
Аватар для Amphiluke
   ☽
Отправить личное сообщение для Amphiluke Посмотреть профиль Найти все сообщения от Amphiluke
 
Регистрация: 07.01.2011
Сообщений: 254

Сообщение от cmygeHm
Блин понятно, первый раз встречаю такое
Разобрались с понятием замыкания? Ну, отлично. Тогда не буду расписывать.
Ответить с цитированием
  #9 (permalink)  
Старый 10.05.2011, 21:42
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

как-то быстро у меня на это два дня ушло
Ответить с цитированием
  #10 (permalink)  
Старый 11.05.2011, 09:56
Аватар для cmygeHm
Профессор
Отправить личное сообщение для cmygeHm Посмотреть профиль Найти все сообщения от cmygeHm
 
Регистрация: 12.10.2010
Сообщений: 196

Сообщение от melky Посмотреть сообщение
как-то быстро у меня на это два дня ушло
Я ПОНЯЛ, ЧТО НИЧЕГО НЕ ПОНЯЛ!!! Сижу читаю замыкания.

Тут еще один вопросик, если можно - здесь же. Внутри функции create:
this.create = function() {
        var div, frag = document.createDocumentFragment();
        for (var i = 0; i < 10; i++) {
            div = frag.appendChild(document.createElement("div"));
            div.onclick = (function(foo, j) { return function() {
/*здесь хочу обратиться к this.SecondMethodOfMyClass(), но вылетает мол "эт не функция". Т.е. не видит этот метод, хотя он втутри этого же "класса" объявлен */
              foo(j); 
              }; })(this.inputObj, i);
        }
        document.getElementById('asdfasdf').innerHTML = "";
        document.getElementById('asdfasdf').appendChild(frag);
    };
    this.SecondMethodOfMyClass() = function() {
               return 1;
    }

Последний раз редактировалось cmygeHm, 11.05.2011 в 11:11.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание события onclick? kerranswell Events/DOM/Window 31 09.05.2011 21:20
Как избавиться от каскадного onclick? GydruS Events/DOM/Window 2 24.02.2011 11:54
onclick и <object> MCTrane Общие вопросы Javascript 3 23.12.2010 23:33
Событие onClick avtor01 Events/DOM/Window 3 03.09.2009 18:01
Вопрос про вызов события onClick skyfish Общие вопросы Javascript 12 27.12.2008 19:12