اذهب إلى المحتوى

السؤال

نشر

السلام عليكم.

في الكود التالي في صورة عدم تطابق البيانات لاتظهر رسالة الخطأ إلا في الخانة الأولى و لا يقع ظهور رسالة الخطأ إلا عند إصلاح التي قبلها.

Capture.JPG.37caf9a83702eab679c9943382d1ee17.JPG

في الصورة الإيميل غير مطابق و لاتظهر رسالة الخطأ إلا بعد أصلاح username و كذلك كلمة المرور غير مطابقة و لا تظهر رسالة الخطأ إلا بعد إصلاح الإيميل. و هكذا دواليك.

الكود:

// register-username-register-email-register-password-register-btn
let form            = document.querySelector('form')
let username        = document.querySelector(".register-username")
let email           = document.querySelector(".register-email")
let password        = document.querySelector(".register-password")
let confirmPassword = document.querySelector('.register-confirm-password')
let registerBtn     = document.querySelector(".register-btn")

// show input error message
function showError(input,message) {
    const formControl = input.parentElement
    formControl.classList = "form-control error"
    const small = formControl.querySelector('small')
    small.innerText = message
}
// show success outline
function showSuccess(input) {
    const formControl = input.parentElement
    formControl.classList = "form-control success"
}

// check email is valid
function checkEmail(input) {
    const re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
    if (re.test(input.value.trim())) {
        showSuccess(input)
        return true
    } else {
        showError(input, 'Email is not valid')
        return false
    }
}

// check passwords much
function checkPassword(input1, input2) {
    if (input1.value != input2.value) {
        showError(input2, 'Passwords do not much')
        return false
    } else {
        return true
    }
}

// check required fields
function checkRequired(inputArr) {
	let result = true;
	inputArr.forEach(function (input) {
		if (input.value.trim() === '') {
			showError(input, `${getFieldName(input)} is required`)
			result = false
		} else {
			showSuccess(input)
		}
	})
	return result;
}

// check input length
function checkLength(input, min, max) {
	if (input.value.length < min) {
		showError(input, `${getFieldName(input)} must be at least ${min}`)
		return false
	} else if (input.value.length > max) {
		showError(input, `${getFieldName(input)} must be less than ${max}`)
		return false
	}
	else {
		showSuccess(input)
		return true
	}
}

// get field name
function getFieldName(input) {
    return input.id.charAt(0).toUpperCase() + input.id.slice(1)
}

// event listeners
form.addEventListener('submit', function (e) {
    e.preventDefault()
    if (checkRequired([username, email, password, confirmPassword]) &&
        checkLength(username, 4, 15) &&
        checkLength(password, 6, 20) &&
        checkEmail(email)) {
        localStorage.setItem("register-username", username.value)
        localStorage.setItem("register-email", email.value)
        localStorage.setItem("register-password", password.value)
        setTimeout(() => {
            window.location = "./login.html"
        }, 1000)
    }
})

الرجاء التوضيح و شكرا. 

Recommended Posts

  • 0
نشر

السبب في ذلك أنّك تنفّذ كلّ طرق الـ check ضمن الجملة الشرطية، والجملة الشرطية عند أول خطأ تراه تقوم بإرساله والخروج فوراً.

حاول التعديل على الكود ليصبح:

form.addEventListener('submit', function (e) {
    e.preventDefault()
  	let check1 = checkRequired([username, email, password, confirmPassword]);
  	let check2 = checkLength(username, 4, 15);
	let check3 = checkLength(password, 6, 20);
    let check4 = checkEmail(email);
    if (check1 &&
        check2 &&
        check3 &&
        check4) {
        localStorage.setItem("register-username", username.value)
        localStorage.setItem("register-email", email.value)
        localStorage.setItem("register-password", password.value)
        setTimeout(() => {
            window.location = "./login.html"
        }, 1000)
    }
})

بحيث تقوم بتنفيذ جميع طرق التفحّص وإرسال جميع الأخطاء.

  • 0
نشر

أنت لم تشارك كود HTML وبالتالي تبقى الإجابة في إطار التكهن. ويبدو لي أن المشكلة تكمن في جزئين أولهما تركيب HTML والثاني الدالة showError  . فإذا كان كل input مرتبط به small خاص به فعليك الوصول الى الأخير من خلال input أو من خلال المعرف id وليس من form  كما تفعل, حتى تتمكن من تعديل النص في العنصر الصحيح, وإلا فمن الكود في الدالة showError نفهم  أن لديك tag واحد من النوع small وأن النص فيه سيتم تعديله في كل مرة تستدعي فيها validation معين وينتهي الأمر برسالة الخطأ لأخر validation يتم تشغيله. 

 إذا لم تعرف كيف تسقط هذا الحل على مشكلتك بتصرف,  يرجى مشاركة كود HTML كاملاً مع JavaScript حتى نعطيك الحل بدقة أكبر. 

  • 0
نشر
بتاريخ 13 دقائق مضت قال علي محسن:

أنت لم تشارك كود HTML وبالتالي تبقى الإجابة في إطار التكهن. ويبدو لي أن المشكلة تكمن في جزئين أولهما تركيب HTML والثاني الدالة showError  . فإذا كان كل input مرتبط به small خاص به فعليك الوصول الى الأخير من خلال input أو من خلال المعرف id وليس من form  كما تفعل, حتى تتمكن من تعديل النص في العنصر الصحيح, وإلا فمن الكود في الدالة showError نفهم  أن لديك tag واحد من النوع small وأن النص فيه سيتم تعديله في كل مرة تستدعي فيها validation معين وينتهي الأمر برسالة الخطأ لأخر validation يتم تشغيله. 

 إذا لم تعرف كيف تسقط هذا الحل على مشكلتك بتصرف,  يرجى مشاركة كود HTML كاملاً مع JavaScript حتى نعطيك الحل بدقة أكبر. 

شكرا على تفاعلكم.

وقع حل المشكل.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...