ما زال النموذج مقدم حتى لو كانت وظيفة المستمع إرجاع خطأ

StackOverflow https://stackoverflow.com/questions/967483

سؤال

أحاول معرفة سبب عدم إيقاف تشغيل هذه الجافا سكريبت النموذج من تقديمه:

<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 والأوبرا. شكرا.

هل كانت مفيدة؟

المحلول

جنبا إلى جدد المعلومات من إجاباتين مفيدة للغاية في حل يعمل على كل من جهاز 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>

نصائح أخرى

يبدو أنه إذا قمت بتغيير وظيفتك إلى

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

يجب أن تفعل ما تبحث عنه.

مصدر

أعتقد أن ما تبحث عنه هو 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>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top