Форма все еще отправлена, хотя функция слушателя возвращает false - PullRequest
7 голосов
/ 09 июня 2009

Я пытаюсь выяснить, почему этот JavaScript не мешает отправке формы:

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

Если я не добавлю следующий атрибут onsubmit к элементу формы:

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

Похоже, только метод addEventListener должен справиться с задачей. Какие-нибудь мысли? Я на Mac и испытываю тот же результат на Safari, Firefox и Opera. Спасибо.

Ответы [ 3 ]

8 голосов
/ 30 ноября 2009

Объединение информации из двух очень полезных ответов в решение, которое работает как на Mac, так и на ПК:

<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 голосов
/ 09 июня 2009

Похоже, если вы измените свою функцию на

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

Он должен делать то, что вы ищете.

источник

2 голосов
/ 09 июня 2009

Я думаю, что вам нужен метод preventDefault() интерфейса Event для браузеров, которые его реализуют. Он отменит отправку формы так, как вы ожидали от "return false" до.

Подробнее здесь и здесь .

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