Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   предотвратить срабатывание функции (https://javascript.ru/forum/extjs/17838-predotvratit-srabatyvanie-funkcii.html)

posta 05.06.2011 12:44

предотвратить срабатывание функции
 
Делаю:
{ xtype: 'button', iconCls: 'icon-delete', text: 'Test',handler: testfn ('alert')}

...
function testfn (fn){
	return false;	
	alert(fn);
}


Работает Если запускать без аргумента. а с аргументом - не робит =(
Подскажите как сделать так, чтобы работало?

Sweet 05.06.2011 15:30

function testfn(fn){
  alert(fn);
};

var object = { handler: testfn("test") }; // "test"

alert( object.handler ); // undefined

Строчка 5: интерпретатор сначала выполнит функцию (мы ведь вызываем ее с помощью круглых скобок), затем присвоит свойству handler результат выполнения функции, т.е. то, что она возвращает. Если функция не возвращает ничего явно (оператор return), она неявно возвращает undefined. Соответственно, object.handler === undefined (второй alert).

posta 05.06.2011 16:39

Ладно, тогда задам вопрос напрямую:

Какой код нужен что бы при нажатии на кнопку в тулбаре - срабатывала функция с аргументом?

Обычно срабатывает еще при загрузке страницы. Потом не работает.

Sweet 05.06.2011 17:22

Хватит тупить уже! Тебе сказали уже как нужно делать.

mycoding 04.07.2011 12:47

Цитата:

Сообщение от posta (Сообщение 107394)
Делаю:
{ xtype: 'button', iconCls: 'icon-delete', text: 'Test',handler: testfn ('alert')}

...
function testfn (fn){
	return false;	
	alert(fn);
}


Работает Если запускать без аргумента. а с аргументом - не робит =(
Подскажите как сделать так, чтобы работало?

Скорее всего ты ищешь как передать параметры в обработчик события.
Смысла прерывать событие в данном случае нет, т.к. тогда зачем его ставить.

Вместо передачи функции в handler, ты её запускаешь.

Аргументы передаются так.
Либо через scope, либо через createDelegate

1 -
{ 
    xtype: 'button',
    iconCls: 'icon-delete',
    text: 'Test',
    handler: testfn
    scope:{text:'alert'}
}


2 -
{ 
    xtype: 'button',
    iconCls: 'icon-delete',
    text: 'Test',
    handler: testfn
    scope:this
}


3 -
var sayHi = function(name){  
    alert('Hi, ' + name + '. You clicked the "' + this.text + '" button.');
}

var btn = new Ext.Button({
    text: 'Say Hi',
    renderTo: Ext.getBody()
});

btn.on('click', sayHi.createDelegate(btn, ['Fred']));


Или
function myButtonHandler(a,b,c){
console.log(a);//1
console.log(b);//2
console.log(c);//3
}
var myButton = new Ext.Button({
       id : 'myButton',
       renderTo : Ext.getBody(),
       text : 'Save',
       handler : myButtonHandler.createDelegate(this, [1,2,3])
});

melky 04.07.2011 17:30

может я чего не понимаю, но как такая функция может вообще работать (да или без аргумента, пофигу), если она сразу возвращает результат??!
function testfn (fn){
	return false;	
	alert(fn);
}

mycoding 04.07.2011 17:46

Цитата:

Сообщение от melky (Сообщение 111735)
может я чего не понимаю, но как такая функция может вообще работать (да или без аргумента, пофигу), если она сразу возвращает результат??!
function testfn (fn){
	return false;	
	alert(fn);
}

Просто posta перепутал.
Ему нужно было лишь вызывать обработчик с параметрами.


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