جافا سكريبت عند_التغيير الحدث منع حدث onsubmit في شكل HTML؟

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

سؤال

والنظر في شكل HTML:

<form action="" method="POST" onsubmit="return checkValidArray()">
    <input type="text" name="data" onchange="return validate(this);">
</form>

ويبدو (في كل من IE 6 و فايرفوكس 3) أنه عند كتابة بعض النص في حقل الإدخال وانقر فوق تقديم وقع الحدث عند_التغيير للحقل الإدخال، ولكن حدث onsubmit لا إطلاق للنموذج إلى أن تنقر على زر الإرسال مرة ثانية (في الوقت الذي عند_التغيير لا إطلاق، بالطبع). وبعبارة أخرى، فإن عند_التغيير يبدو لمنع onsubmit من اطلاق النار.

والرغبة للتحقق كل حقل في النموذج عند ينهي المستخدم المجال من أجل تزويدهم ردود الفعل التحقق على الفور، وأيضا لمنع تقديم النموذج إذا كان هناك بيانات غير صالحة.

[تحرير: لاحظ أن كلا من وظائف التحقق من صحة تحتوي على تنبيه ()]

وكيف يمكن للمرء الحصول تغلب على هذه المشكلة؟

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

المحلول

والحل (من نوع):

وتبين أنه هو الوجود الوحيد للتنبيه () - أو تأكيد () - خلال الحدث مساهمة في عند_التغيير التي تسبب الحدث للنموذج onsubmit لعدم اطلاق النار. ويبدو أن موضوع JS للحصول على حظره من قبل التنبيه ().
الحل هو أن لا يتضمن أي تنبيه () أو تأكيد () في الدعوة عند_التغيير المدخلات و.

والمتصفحات المعروفة أن تتأثر:
IE6 - ويندوز
IE8 - فوز
FF3 - فوز

والمتصفحات لا يعرف أن تتأثر:
جوجل كروم - فوز
سفاري - ماك
FF - ماك

نصائح أخرى

وحاولت مع فايرفوكس 3 (ماك) مع التعليمات البرمجية التالية:

    <html>
        <head>
            <script>
                function validate(ele)
                {
                    alert("vali");
                    return false;
                }

                function checkValidArray()
                {
                    alert("checkValidArray");
                }

            </script>
        </head>
        <body>
            <form action="" method="POST" onsubmit="return checkValidArray()">
                <input type="text" name="data" onchange="return validate(this);">
                <input type="submit" value="Ok">
            </form>
        </body>
</html>

ويبدو للعمل. عند النقر على زر موافق، على حد سواء "فالي" و "تحقق صالح صفيف" يطفو على السطح. في البداية اعتقدت return false يمكن أن يكون السبب لماذا لم يتم إرسال النموذج، ولكن تقديمه (على الأقل، ويسمى checkValidArray()).

والآن، ماذا تفعل في أساليب checkValidArray() وvalidate() الخاصة بك؟ شئ مميز؟ يمكنك نشر مدونة؟

وتحرير: أنا اختبرت مع IE8 وFF3 على النوافذ، وهنا لا تحصل أطلقت كلا الحدثين. ليس لدي أي فكرة عن السبب. ربما و onblur هو الحل، ولكن لماذا لا عند_التغيير لا تعمل؟ هل هناك سبب معين أم أنها مجرد تناقض آخر؟ (يعمل على كل FF وسفاري على ماك)

هل يمكن استخدام الحدث و onblur في المدخلات الخاصة بك بدلا من عند_التغيير.

وانها مثيرة للاهتمام الى حد بعيد أن السلوك يختلف على ماك، لذلك يبدو نظام أساسي متصفح تعتمد ولا تعتمد. يجب أن يكون لديه أدنى فكرة هناك في مكان ما ...

وحاولت و onblur مع رمز نيفا "ولكن كان نفس النتيجة كما هو الحال مع عند_التغيير (فقط" فالي "التنبيه).

وماذا يحدث فرقا هو ما إذا كان لديك <م> أي شيء في التحقق من صحة (). التعليق الخروج التنبيه خط ( "فالي")؛ ويعمل! (قيمة الإرجاع الفعلية من التحقق من صحة () لا يهم، على الرغم من أن لا أتوقع أن.)

وتحرير: زميل حاول فقط هذا في جوجل كروم على ويندوز ويعمل هناك. وهذا يجعل حدسي الشعور بسبب الطريقة يفصل كروم المواضيع JS.

وشيء التنبيه الأول () تسد موضوع يسبب حدث onsubmit لتضيع. ممكن شرط السباق؟

لا إنشاء. زر الإرسال. بدلا من ذلك، إنشاء زر عادي وكتابة دالة التي يمكن استدعاؤها عند _ النقر مع هذا الزر.

سوف

وظيفة قيام التحقق من الصحة على حقول النموذج، وإذا كان كل شيء على ما يرام، وسوف تقدم النموذج. وإلا فإنه لن.

function validate
{
  "Piece of code to Validate your form"
  document.formName.action.value = "URL which you want to call"
 document.propFile.submit(); // It will submit he page
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top