2009-06-08 10 views
7

Estoy tratando de averiguar por qué este JavaScript no se detiene la forma de ser presentado:forma aún se presentó a pesar de que la función de detector devuelve falso

<form action="http://www.example.com" id="form"> 
    <input type="text" /> 
    <input type="submit" /> 
</form> 

<script> 
var code = function() { 
    return false; 
}; 
var element = window.document.getElementById("form"); 
if (element.addEventListener) { 
    element.addEventListener("submit", code, false); 
} 
</script> 

A menos que añado el siguiente atributo a la forma onsubmit elemento:

<form action="http://www.example.com" id="form" onsubmit="return false"> 
    <input type="text" /> 
    <input type="submit" /> 
</form> 

<script> 
var code = function() { 
    return false; 
}; 
var element = window.document.getElementById("form"); 
if (element.addEventListener) { 
    element.addEventListener("submit", code, false); 
} 
</script> 

Parece que el método addEventListener solo debería hacer el truco. ¿Alguna idea? Estoy en una Mac y estoy experimentando el mismo resultado en Safari, Firefox y Opera. Gracias.

+0

posible duplicado de [return false en addEventListener presentar todavía presenta la formulario?] (http://stackoverflow.com/questions/4924036/return-false-on-addeventlistener-submit-still-submits-the-form) – unor

Respuesta

8

combinó la información de las dos respuestas muy útiles en una solución que funciona tanto en Mac y PC:

<script> 
var code = function (eventObject) { 
    if (eventObject.preventDefault) { 
     eventObject.preventDefault(); 
    } else if (window.event) /* for ie */ { 
     window.event.returnValue = false; 
    } 
    return true; 
}; 
var element = window.document.getElementById("form"); 
if (element.addEventListener) { 
    element.addEventListener("submit", code, false); 
} else if (element.attachEvent) { 
    element.attachEvent("onsubmit", code); 
} 
</script> 
6

Parece que si cambia su función para

var code = function(e) { 
    e.preventDefault(); 
} 

Se debe hacer lo que estás buscando.

source

2

creo que lo que estás buscando es el método de la interfaz preventDefault()Event para los navegadores que implementan. Cancelará el envío del formulario de la forma en que esperaba "return false" a.

Más here y here.

<script type="text/javascript"> 
var code = function (evt) { 
      if (evt.preventDefault) { 
       evt.preventDefault(); 
      } 
      return false; 
}; 
window.onload = function() { 
    var element = window.document.getElementById("form"); 
    if (element.addEventListener) { 
     element.addEventListener("submit", code, false); 
    } 
}; 
</script> 
Cuestiones relacionadas