ما زال النموذج مقدم حتى لو كانت وظيفة المستمع إرجاع خطأ
-
12-09-2019 - |
سؤال
أحاول معرفة سبب عدم إيقاف تشغيل هذه الجافا سكريبت النموذج من تقديمه:
<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>
لا تنتمي إلى StackOverflow