Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите! Как вызвать суперфункцию! (https://javascript.ru/forum/misc/33368-pomogite-kak-vyzvat-superfunkciyu.html)

Фархад Рахимжанов 20.11.2012 19:52

Помогите! Как вызвать суперфункцию!
 
Я нуб, нужен совет! Скрипт не то, что не работает, я просто боюсь его запускать, не узнав точно безопасно ли это!

function TableTool() {
 return {
  supermethod : function() {
    // super action!
  },

  getTextField : function() {
   return '<input type="text" onblur="TableTool.supermethod()">';
  }
 }
}

var T = TableTool();
document.writeln(T.getTextField());


Интересует момент onblur="TableTool.supermethod()": могу ли я в обработчик события посадить функцию-метод из "класса" TableTool?

Фархад Рахимжанов 21.11.2012 06:59

Блина, вы так мне ничего и не подсказали!
Но я подумал о таком:

...
getField() : function(m) {
 return '<input onblur="' + m + '.supermethod()" ... >';
}
...
var T = TableTool();
document.writeln(T.getField('T'));


PS: не думал, что с ЧЮ тут будет так плохо.

Aetae 21.11.2012 07:19

На самом деле работать с dom как с текстом не рекомендуется(только в особых случаях) - это раз.
Использовать document.write также можно только в особых случаях(при загрузке страницы) - это два.

Делается всё это на самом деле упрощённо так:
<body>
<script>
function TableTool() {
	return {
		supermethod : function() {
			alert(this.value)
		},

		getTextField : function( text ) {
			var input = document.createElement('input');
			input.type = 'text';
			input.onblur = this.supermethod;
			input.value = text;
			return input
		}
	}
}
 
var T = TableTool();
document.body.appendChild(T.getTextField('test'));
document.body.appendChild(T.getTextField('test2'));
</script>
<body>

Фархад Рахимжанов 21.11.2012 08:55

Aetae, спасибо, теперь понятно касаемо вставки в обработчик события внутреннего метода "класса".

По поводу работы с DOM как с текстом.
По каким причинам не рекомендуется, помимо морально-этических?

Фархад Рахимжанов 21.11.2012 13:17

Цитата:

Сообщение от Дзен-трансгуманист
Ну, для начала, классом тут и не пахнет. Функция у вас не работает как конструктор, а объекты, которые она возвращает, не будут иметь каких-либо унаследованных свойств.

http://javascript.ru/tutorial/object...itance#factory

Aetae 21.11.2012 16:51

Цитата:

Сообщение от Фархад Рахимжанов (Сообщение 217004)
По поводу работы с DOM как с текстом.
По каким причинам не рекомендуется, помимо морально-этических?

Удобство и простота. Ну и выигрыш скорости небольшой. Работа с текстом только на первый взгляд кажется проще и удобнее. Любая работа над чем-то сложнее домашней странички превратится в ад.

Фархад Рахимжанов 21.11.2012 18:06

А если в ячейку таблицы нужно вставить input, затем еще какой то текст, другие теги типа img (например в ячейку нужно вставить поле типа Date с т.н. Datepicker)? Тоже делать это все через document.createElement()?


Часовой пояс GMT +3, время: 01:06.