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); }); |
"<div onclick='this.inputObj(" + i + "); return false;'>" |
ммммммм.... помоему пробывал. но все равно перепроверю...
|
В данном случае корректнее будет привязывать обработчик не через инлайновый атрибут 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); } } |
Вот это всяко правильнее, спасибо. А вот это
Цитата:
|
Только не понятно что это за комбинация такая:
div.onclick = (function(foo, j) { return function() { foo(j); }; })(this.inputObj, i);. зачем такая громоздкость, вместо div.onclick = (function(foo, j) { return this.inputObj(j); });и что это вообще обозначает ??? |
Цитата:
|
Цитата:
|
как-то быстро :) у меня на это два дня ушло
|
Цитата:
Тут еще один вопросик, если можно - здесь же. Внутри функции 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; } |
Часовой пояс GMT +3, время: 10:35. |