A seguir está o meu código JavaScript (mootools):
$('orderNowForm').addEvent('submit', function (event) {
event.preventDefault();
allFilled = false;
$$(".required").each(function (inp) {
if (inp.getValue() != '') {
allFilled = true;
}
});
if (!allFilled) {
$$(".errormsg").setStyle('display', '');
return;
} else {
$$('.defaultText').each(function (input) {
if (input.getValue() == input.getAttribute('title')) {
input.setAttribute('value', '');
}
});
}
this.send({
onSuccess: function () {
$('page_1_table').setStyle('display', 'none');
$('page_2_table').setStyle('display', 'none');
$('page_3_table').setStyle('display', '');
}
});
});
Em todos os navegadores, exceto no IE, isso funciona bem. Mas no IE, isso causa um erro. Eu tenho o IE8 e, ao usar seu depurador JavaScript, descobri que o event
objeto não possui um preventDefault
método que está causando o erro e, portanto, o formulário está sendo enviado. O método é suportado no caso do Firefox (que eu descobri usando o Firebug).
Qualquer ajuda?
Respostas:
no IE, você pode usar
para alcançar o mesmo resultado.
E para não obter um erro, você pode testar a existência de preventDefault:
Você pode combinar os dois com:
fonte
event.preventDefault ? event.preventDefault() : event.returnValue = false;
event.preventDefault();
parou de trabalhar para mim no FireFox por algum motivo, do nada. Utilizou o código da moralidade e funcionou muito bem. Obrigado ~$('.something').click(function(e){ e.preventDefault ? e.preventDefault() : event.returnValue = false; });
Se você vincular o evento através da função addEvent do mootools, seu manipulador de eventos receberá um evento fixo (aumentado) passado como parâmetro. Ele sempre conterá o método preventDefault ().
Experimente este violino para ver a diferença na associação de eventos. http://jsfiddle.net/pFqrY/8/
Para todos os usuários do jQuery , você pode corrigir um evento quando necessário. Digamos que você tenha usado o HTML onclick = ".." e obtenha um evento específico do IE que não contenha preventDefault (), basta usar esse código para obtê-lo.
Depois disso e.preventDefault (); funciona bem.
fonte
Eu sei que este é um post antigo, mas passei algum tempo tentando fazer esse trabalho no IE8.
Parece que existem algumas diferenças nas versões do IE8 porque as soluções postadas aqui e em outros threads não funcionaram para mim.
Digamos que temos este código:
No meu
preventDefault()
método IE8 existe por causa do jQuery, mas não está funcionando (provavelmente por causa do ponto abaixo), então isso falhará.Mesmo se eu definir a
returnValue
propriedade diretamente como false:Isso também não funcionará, porque acabei de definir algumas propriedades do objeto de evento personalizado do jQuery.
A única solução que funciona para mim é definir a propriedade
returnValue
da variável globalevent
como esta:Apenas para facilitar para alguém que tentará convencer o IE8 a trabalhar. Espero que o IE8 morra horrivelmente em uma morte dolorosa em breve.
ATUALIZAR:
Como sv_in aponta, você pode usar
event.originalEvent
para obter o objeto de evento original e definir areturnValue
propriedade no objeto original. Mas ainda não testei no IE8.fonte
event.originalEvent
. Mais informações: stackoverflow.com/a/16675056/22550O Mootools redefine preventDefault nos objetos Event. Portanto, seu código deve funcionar bem em todos os navegadores. Caso contrário, existe um problema com o suporte ie8 no mootools.
Você testou seu código em ie6 e / ou ie7?
O documento diz
mas, caso contrário, convém tentar
fonte
Testado no IE 9 e Chrome.
fonte
Para desativar uma tecla do teclado após o IE9, use:
e.preventDefault();
Para desativar uma tecla normal do teclado no IE7 / 8, use:
e.returnValue = false;
oureturn false;
Se você tentar desativar um atalho de teclado (com Ctrl, como
Ctrl+F
), precisará adicionar essas linhas:Aqui está um exemplo completo apenas para o IE7 / 8:
Referência: Como desativar os atalhos de teclado no IE7 / IE8
fonte
Aqui está uma função que eu tenho testado com a compilação noturna do jquery 1.3.2 e do dia 18/09/2009. Deixe-me saber seus resultados com ele. Tudo corre bem nesse sentido no Safari, FF, Opera no OSX. É exclusivamente para corrigir um bug problemático do IE8 e pode ter resultados indesejados:
Uso:
fonte
stop
método antes e não consegui encontrá-lo no msdn. O que isso faz?.stop()
lança uma exceção, porque não existe. Qualquer exceção terá o efeito desejado.e.preventDefault()
porque ele iria lançar uma exceção de qualquer maneira ...preventDefault
é um padrão generalizado; usar um adhoc toda vez que você desejar estar em conformidade com as versões antigas do IE é complicado, é melhor usar um polyfill:Isso modificará o protótipo do evento e adicionará esta função, um ótimo recurso do javascript / DOM em geral. Agora você pode usar
e.preventDefault
sem problemas.fonte
return false
no seu ouvinte deve funcionar em todos os navegadores.fonte
FWIW, caso alguém revise essa pergunta posteriormente, você também pode verificar o que está entregando à sua função de manipulador onKeyPress.
Eu encontrei esse erro quando passei onKeyPress por engano em vez de onKeyPress (evento).
Apenas mais uma coisa para verificar.
fonte
Fui ajudado por um método com uma verificação de função. Este método funciona no IE8
fonte