El siguiente es mi 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', '');
}
});
});
En todos los navegadores, excepto IE, esto funciona bien. Pero en IE, esto causa un error. Tengo IE8, así que al usar su depurador de JavaScript, descubrí que el event
objeto no tiene un preventDefault
método que esté causando el error y, por lo tanto, el formulario se está enviando. El método es compatible en el caso de Firefox (que descubrí usando Firebug).
¿Alguna ayuda?
Respuestas:
en IE, puedes usar
para lograr el mismo resultado.
Y para no obtener un error, puede probar la existencia de preventDefault:
Puedes combinar los dos con:
fuente
event.preventDefault ? event.preventDefault() : event.returnValue = false;
event.preventDefault();
Dejé de trabajar para mí en Firefox por alguna razón, de la nada. Usé el código de mority y funcionó muy bien Gracias ~$('.something').click(function(e){ e.preventDefault ? e.preventDefault() : event.returnValue = false; });
Si vincula el evento a través de la función addEvent de mootools, su controlador de eventos obtendrá un evento fijo (aumentado) como parámetro. Siempre contendrá el método preventDefault ().
Pruebe este violín para ver la diferencia en el enlace de eventos. http://jsfiddle.net/pFqrY/8/
Para todos los usuarios de jQuery , puede arreglar un evento cuando sea necesario. Digamos que usaste HTML onclick = ".." y obtienes un evento específico de IE que carece de preventDefault (), solo usa este código para obtenerlo.
Después de eso e.preventDefault (); funciona bien.
fuente
Sé que esta es una publicación bastante antigua, pero acabo de pasar un tiempo tratando de hacer que esto funcione en IE8.
Parece que hay algunas diferencias en las versiones de IE8 porque las soluciones publicadas aquí y en otros hilos no funcionaron para mí.
Digamos que tenemos este código:
En mi IE8
preventDefault()
método existe debido a jQuery, pero no funciona (probablemente debido al siguiente punto), por lo que esto fallará.Incluso si configuro la
returnValue
propiedad directamente en falso:Esto tampoco funcionará, porque acabo de establecer alguna propiedad del objeto de evento personalizado jQuery.
La única solución que funciona para mí es establecer la propiedad
returnValue
de la variable global deevent
esta manera:Solo para que sea más fácil para alguien que intente convencer a IE8 de que trabaje. Espero que IE8 muera horriblemente en una muerte dolorosa pronto.
ACTUALIZAR:
Como señala sv_in , puede usar
event.originalEvent
para obtener el objeto de evento original y establecer lareturnValue
propiedad en el original. Pero aún no lo he probado en mi IE8.fuente
event.originalEvent
. Más información: stackoverflow.com/a/16675056/22550Mootools redefine preventDefault en los objetos de evento. Por lo tanto, su código debería funcionar bien en todos los navegadores. Si no es así, entonces hay un problema con el soporte de ie8 en mootools.
¿Probaste tu código en ie6 y / o ie7?
El doctor dice
pero en caso de que no sea así, puede intentar
fuente
Probado en IE 9 y Chrome.
fuente
Para deshabilitar una tecla del teclado después de IE9, use:
e.preventDefault();
Para deshabilitar una tecla de teclado normal en IE7 / 8, use:
e.returnValue = false;
oreturn false;
Si intenta deshabilitar un atajo de teclado (con Ctrl, me gusta
Ctrl+F
) necesita agregar esas líneas:Aquí hay un ejemplo completo solo para IE7 / 8:
Referencia: Cómo deshabilitar los atajos de teclado en IE7 / IE8
fuente
Aquí hay una función que he estado probando con jquery 1.3.2 y la compilación nocturna del 18/09/2009. Déjame saber tus resultados con él. Todo se ejecuta bien en este extremo en Safari, FF, Opera en OSX. Es exclusivamente para corregir un error problemático de IE8 y puede tener resultados no deseados:
Uso:
fuente
stop
antes había visto este método, y no pude encontrarlo en msdn. ¿Qué hace?.stop()
lanza una excepción, porque no existe. Cualquier excepción tendrá el efecto deseado.e.preventDefault()
porque arrojaría una excepción de todos modos ...preventDefault
es un estándar generalizado; Usar un ad hoc cada vez que quiera cumplir con las versiones antiguas de IE es engorroso, mejor usar un polyfill:Esto modificará el prototipo del Evento y agregará esta función, una gran característica de javascript / DOM en general. Ahora puedes usar
e.preventDefault
sin problema.fuente
return false
en su oyente debería funcionar en todos los navegadores.fuente
FWIW, en caso de que alguien revise esta pregunta más tarde, también puede verificar lo que está entregando a su función de controlador onKeyPress.
Me encontré con este error cuando pasé por error onKeyPress (esto) en lugar de onKeyPress (evento).
Solo algo más para verificar.
fuente
Me ayudó un método con una verificación de función. Este método funciona en IE8
fuente