Firefox, Event Listeners e Return

Quem já não perdeu alguns fios de cabelo usando return false em um Event Listener no Firefox? Por mais que se tente, o evento continua com seu comportamento padrão. Nesse post vou mostrar a “grande” solução.

De acordo com a especificação do ECMAScript, Event Listeners (definidos através da famosa addEvent, para execvent, para executar funções no disparo de eventos) não possuem valores de retorno, ou seja, return false não faz efeito algum (pelo menos no Firefox, que segue esse padrão).

A solução é simples: a função não possui valor de retorno, mas recebe como parâmetro um objeto Event. Através dele, podemos usar Event.preventDefault para impedir que o comportamento padrão seja executado. Veja o código:

addEvent(myForm, "submit", function(e) {
		if(e && e.preventDefault) e.preventDefault();
		else return false; // JavaScript à moda IE
	})

Simples, não? Espero que possa ajudar, já que também tive esse pequeno problema. Até o próximo post!

Posts Relacionados

Postado em fevereiro 07, 2008 às 17:39

Comentários

  1. Bernardo Rufino

    É, detalhe importante que às vezes passa despercebido… Ahh se não quiser dar um return false pro IE, pode usar a propriedade returnValue do evento também.
    Abcs


  2. Eduardo Ottaviani

    Muito interessante e inteligente também.
    O iE nos força mesmo a fazer tudo errado…

    Percebi que o iE me deixa meio folgado, porque às vezes é tão mais fácil…melhor que ir aprender a fazer direito. rsrsrs

    Abraços


  3. JulioGreff

    @Bernardo: mas aí seria window.event, não? Que me lembre o IE não passa o evento como parâmetro.
    @Eduardo: Também sentia isso antes de começar com Ajax. Mas as frescuras que o IE dá é só pra atrapalhar mesmo…


  4. Tiago Floriano

    Dizem que o bom é qualidade, e não quantidade, e pode apostar que em termos de qualidade teu blog está anos luz a frente :)

    Um abraço!


  5. Bernardo Rufino

    Sim, só por window.event


Deixe seu comentário