Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Клик срабатывает без щелчка на кнопке - почему?.. (https://javascript.ru/forum/events/30711-klik-srabatyvaet-bez-shhelchka-na-knopke-pochemu.html)

deivan 13.08.2012 14:20

Клик срабатывает без щелчка на кнопке - почему?..
 
Описал объект таким образом:
var main = {
        inputTable: document.getElementById('container');

	init: function () {
		this.addButton( 'Run Task 1',this.task1(this.inputTable) );
	},

	task1: function(table) {
       // здесь подготовка контейнера для вывода и вывод
		document.body.appendChild(newTableDOM);
	},

	addButton: function(butName,butClick) {
		var newBut=document.createElement('BUTTON');
		newBut.innerHTML=butName;
		newBut.onclick=butClick;
		document.body.appendChild(newBut);
	}
};

main.init();


при отработке кода в браузере (Хром) кнопка добавляется в документ, и сразу же выполняется код, который предназначен на onclick этой кнопки, без клика по добавленной кнопке. Изначально необходимо показывать собранный контейнер по щелчку на кнопке.

ЧЯДНТ?..

devote 13.08.2012 14:24

Цитата:

Сообщение от deivan
this.task1(this.inputTable)

потому что вы его сразу вызываете, а нужно делать так:
this.addButton( 'Run Task 1',this.task1 );

или так:
this.addButton( 'Run Task 1',(function(self){
    return function(){
        self.task1(self.inputTable)
    }
})(this) );

Aetae 13.08.2012 14:28

this.task1(this.inputTable)
Берётся this.task1...
и вызывается с параметром this.inputTable.
В обработчик же onclick передаётся уже результат вызова.(в данном случае undefined, т.к. в this.task1 нет return)

deivan 13.08.2012 14:42

ага, понятно! спасибо...


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