2012-01-05 4 views
1

скажем я это сделать:MooTools отключить или перехватить добавленное событие

$('field').addEvents ({ 
    'focus' : function() { // do some stuff } 
    'blur' : function() { // do other stuff } 
}); 

это поведение по умолчанию для всех моих полей ввода текста. то, что я теперь хочу сделать что-то вроде этого

<button id='shinyButton' name='shinyButton'>Poke Me</button>

затем:

$('shinyButton').addEvent('click', function() { 
    stopDefaultBlurFunctionInCurrentlyFocussedField(); 
    // do seriously cool stuff 
    if (finishedDoingSeriouslyCoolStuff) { 
    $('field').focus(); // return focus to input field 
    } 
} 

так:

1) как я stopDefaultBlurFunctionInCurrentlyFocussedField() ;?

2) как я могу сказать, действительно ли я законченДозингСерьезныйКласс?

+0

нажав на кнопку, пока сосредоточены на поле сложно, он будет срабатывать от размытия, а также щелчком вы можете использовать небольшую задержку на размытый обратного вызова, которые можно очистить. на клике - НЕ идеальный, так как клик может быть длинным кликом, поскольку мышь держится дольше, чем ожидалось, - или вы можете пойти с делегацией для всех этих элементов в родительскую форму, где вы можете проверить eventTargets и т. д. ... это не легкая задача. y также добавляет событие mouseover на кнопку, которая устанавливает флаг в полях, которые размытие проверяет и выходит изящно ... –

+0

gotcha. поэтому для моих целей и целей: НЕТ. : D еще раз спасибо @Dimitar. как сидней, я вижу, что вы тоже самоучкой. дает мне надежду! лол. – WhiteRau

+0

nah- он может работать. проверьте http://jsfiddle.net/dimitar/edsqg/1/ - как я уже сказал, отключает событие размытия в нужном поле, если вы наведете указатель мыши, чтобы щелчок на нем не вызвал проверку поля. любое другое размытие будет. –

ответ

0

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

Предложение Димитара отключить событие при наведении мыши отлично подходит для пользователей мыши, но не позволяет пользователям запускать кнопку с помощью клавиатуры.

Один из вариантов (но немного взломанный) заключается в том, чтобы ввести крошечную задержку в обработчик события blur и использовать флаг переменной для управления запуском события (вам может потребоваться настроить задержку, чтобы она была незаметной, но все же достаточно долго для ваших целей:

var disableBlurMethod = false; 

$('field').addEvents ({ 
    'focus' : function() { // do some stuff } 
    'blur' : function() { 
    (function() { 
     if (!disableBlurMethod) { 
     // do some stuff 
     } 
    }).delay(50); 
    } 
}); 

$('shinyButton').addEvent('click', function() { 
    disableBlurMethod = true; 
    // do seriously cool stuff 
    if (finishedDoingSeriouslyCoolStuff) { 
    disableBlurMethod = false; 
    $('field').focus(); // return focus to input field 
    } 
} 
Смежные вопросы