Mogę złożyć formularz i potwierdzić go za pomocą prostej anonimowej funkcji w JavaScript, ponieważ,

 document.getElementById('myForm').onsubmit = function() {
     if(document.getElementById('email').value == "") {
         document.getElementById('errormessage').innerHTML = "Please provide at least an email address";
         return false;
     } else {
         return true; // Note this
     }
 };

W powyższym przykładzie przy użyciu funkcji anonimowej, mogłem po prostu przypisać wartość zwracaną, gdy dokument zostanie złożony i uniemożliwił przesyłanie strony, podczas gdy w poniższym przykładzie użyj addEventListener, aby dodać zdarzenie, gdy formularz zostanie złożony i jest dalej oceniane przez funkcję walidate. Umieściłem również wartość powrotowa, która ma być prawdziwa lub fałszywa, ale podejście to nie wydaje się działać, a strona zostanie złożona. Myślę, że się mylę, zwracając wartość

function addEventHandler(node, evt, func) {
    if(node.addEventListener)
        node.addEventListener(evt, func);
    else
        node.attachEvent("on" + evt, func);
}
function initializeAll() {
    addEventHandler(document.getElementById('myform'), 'submit', validate);
}
function validate() {
    if(document.getElementById('email').value == ""){
        document.getElementById("errormessage").innerHTML = "Please provide at least an email ";
        return false;
    } else {
        return true;
    }
}
addEventHandler(window, 'load', initializeAll);

Jak powinienem zwrócić wartość w ten sposób, aby zapobiec złożeniu formularza lub złożenia formularza?

2
Sandeep 22 listopad 2011, 23:31

3 odpowiedzi

Najlepsza odpowiedź

Myślę, że twój problem występuje, ponieważ używasz Dom Poziom 2 Rejestrator zdarzeń z AddEventlistener, dzięki czemu można użyć event.preventDefault() dla Firefoksa i {x1}} do innych przeglądarek. Spróbuj z tym demo:

http://jsfiddle.net/pyysz/42/

2
Galled 22 listopad 2011, 20:31

Opublikowałeś to pytanie pod JQuery, więc wyrzucę rozwiązanie jQuery dla Ya:

$('#myform').on('submit', function () {
    if($('#email').val() == ""){
        $('#errormessage').html("Please provide at least an email ");
        return false;
    } else {
        return true;
    }
});

Zauważ, że używałem funkcji jQuery 1.7 .on(), które w tym przypadku zastępuje funkcję .bind() wcześniejszych wersji.

--Aktualizuj--

Oto jsfiddle powyższego rozwiązania: http://jsfiddle.net/jasper/lmayk/

4
Jasper 19 grudzień 2011, 18:59

Użyj czegoś takiego

<form ...... onsubmit="return your validationFunctionThatReturnTruOrFalse() " >
1
Jasper 19 grudzień 2011, 19:00