Cancelar 'onblur'(mas não o evento em si), ao dar click em outro elemento
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 ); } }