предотвратить срабатывание функции
Делаю:
{ xtype: 'button', iconCls: 'icon-delete', text: 'Test',handler: testfn ('alert')} ... function testfn (fn){ return false; alert(fn); } Работает Если запускать без аргумента. а с аргументом - не робит =( Подскажите как сделать так, чтобы работало? |
function testfn(fn){ alert(fn); }; var object = { handler: testfn("test") }; // "test" alert( object.handler ); // undefined Строчка 5: интерпретатор сначала выполнит функцию (мы ведь вызываем ее с помощью круглых скобок), затем присвоит свойству handler результат выполнения функции, т.е. то, что она возвращает. Если функция не возвращает ничего явно (оператор return), она неявно возвращает undefined. Соответственно, object.handler === undefined (второй alert). |
Ладно, тогда задам вопрос напрямую:
Какой код нужен что бы при нажатии на кнопку в тулбаре - срабатывала функция с аргументом? Обычно срабатывает еще при загрузке страницы. Потом не работает. |
Хватит тупить уже! Тебе сказали уже как нужно делать.
|
Цитата:
Смысла прерывать событие в данном случае нет, т.к. тогда зачем его ставить. Вместо передачи функции в 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]) }); |
может я чего не понимаю, но как такая функция может вообще работать (да или без аргумента, пофигу), если она сразу возвращает результат??!
function testfn (fn){ return false; alert(fn); } |
Цитата:
Ему нужно было лишь вызывать обработчик с параметрами. |
Часовой пояс GMT +3, время: 03:18. |