Boas galera!

mais uma dúvida que surgiu no iMasters.

A melhor forma que consegui pensar para resolver essa situação, foi usando um setTimeout, para atrasar o disparo da função invocada pelo evento onblur.

Veja, não dá para ‘cancelar o evento’. Quando vc tirar o foco do input, para clicar no button, irá acontecer instantaneamente o evento onblur do input.

Rodem este script, para entenderem a situação:

<script type="text/javascript">
function id( el ){
        return document.getElementById( el );
}
function escreve(){
        id('result').innerHTML += i+'
'; i++; } var i = 0; var itv = 0; window.onload = function(){ id('q').onblur = function(){ window.clearInterval( itv ); itv = window.setInterval( escreve, 200 ); } id('ok').onclick = function(){ id('result').innerHTML += 'cancelar ação
'; window.clearInterval( itv ); } } </script> <input type="text" name="q" id="q" /> <input type="button" name="ok" value="Ok" id="ok" /> <div id="result"></div>

basta comentar esta linha:

window.clearInterval( itv );

para entender oque acontece.

script final, então, para ‘cancelar o evento’:

window.onload = function(){

        id('q').focus();

        id('q').onblur = function(){
                tot = window.setTimeout( escreve, 500 );
        }
        id('cboption').onclick = function(){
                id('result').innerHTML += 'cancelar ação
'; window.clearTimeout( tot ); } }