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"> type="text/javascript">
function id( el ){
return document.getElementById( el );
}
function escreve(){
id('result').innerHTML += i+'<br />';
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<br />';
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<br />';
window.clearTimeout( tot );
}
}