2009-06-08 12 views
7

próbuję dowiedzieć się, dlaczego ta JavaScript nie zatrzymać formularza z poddaniem:Forma jest nadal składać chociaż funkcję detektora zwraca wartość false

<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> 

ile mogę dodać następujący atrybut onsubmit do formularza element:

<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> 

Wygląda na to, że sama metoda addEventListener powinna wystarczyć. jakieś pomysły? Jestem na komputerze Mac i doświadczam tego samego wyniku w Safari, Firefoksie i Operze. Dzięki.

+0

możliwym duplikatu [return false na addEventListener złożyć nadal podnosi formularz?] (http://stackoverflow.com/questions/4924036/return-false-on-addeventlistener-submit-still-submits-the-form) – unor

Odpowiedz

8

połączeniu informacji z dwóch bardzo pomocnych odpowiedzi do roztworu, który działa zarówno na komputerach Mac i 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

Wygląda jeśli zmienisz funkcję

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

Należy robić to, czego szukasz.

source

2

myślę co szukasz jest metoda preventDefault() interfejsu Event dla przeglądarek, które je wdrożyć. Spowoduje to anulowanie przesyłania formularza w sposób oczekiwany "return false".

Więcej here i 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> 
Powiązane problemy