Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found

Submitted

CSS, HTML and not-that-well-working JavaScript

P
Katrien Sā€¢ 1,070

@graficdoctor

Desktop design screenshot for the Ping single column coming soon page coding challenge

This is a solution for...

  • HTML
  • CSS
  • JS
1newbie
View challenge

Design comparison


SolutionDesign

Solution retrospective


I'm just completely lost in the javascript-form validation. And I have no idea how to clear the input. I've tried .reset(), I tried resetting the values with (something similar to) email[0].value = ''. Would anyone know a good source for more information? I tried a zillion YouTube-video's, but noone resets the value and I think that is why I'm running into errors?

As for the css & html: this was fairly logic and no questions here really.

Community feedback

James Mitchellā€¢ 295

@iamjmitch

Posted

Hi there,

Ill do my best to try and explain some stuff

To answer your reset question, try form.reset(). this worked for me.

the other issue you are having is that the JS is not actually capturing the value of the input. const email = document.getElementById('email').value.trim() is running at page load, not when you hit the notify button so the inputted email address is never actually being captured and passed to the checkInputs() function for validation. Try declaring email on load const email = document.getElementById('email') and then inside your eventListener have something that looks like

form.addEventListener('submit', (e) => {
  e.preventDefault();
 var inputtedValue = email.value.trim();
  checkInputs(inputtedValue);
})

this will make sure that the most up to date value is always passed to your check function when the user hits the notify button

Then with your actual check function, if(!email) is checking to see if the variable doesn't exist which, as you are declaring it on page load, email will never not exist and the first block of code will never run. What you want to do is check whether that value is an empty string or ""

  function checkInputs(inputtedValue) {
  if (inputtedValue  === "") {
    message.classList.remove('valid')
    message.classList.add('invalid')
    message.innerText = 'You forgot to enter your address'
    message.style.display = 'inline-block'
  } else if (inputtedValue.match(emailPattern)) {
    message.classList.add('valid')
    message.classList.remove('invalid')
    message.innerText = 'Your email address is valid'
    message.style.display = 'inline-block'
  } else {
    message.classList.remove('valid')
    message.classList.add('invalid')
    message.innerText = 'Oops, something went wrong'
    message.style.display = 'inline-block'
  }
}

Have a look at the above modified function and see if you can work out whats going on. All the above put together should result in the functionality that your after. Hopefully this somewhat explains some stuff. Please let me know if you still dont understand and I can see how I can help

1

P
Katrien Sā€¢ 1,070

@graficdoctor

Posted

@iamjmitch It works! Thank you. Your explanation made me understand what I was doing wrong. It really helped me. :) Would you help me still though with where do I need to put the form.reset()and do I also need to reset the message, or does this automatically work when I reset the form?

0
James Mitchellā€¢ 295

@iamjmitch

Posted

@graficdoctor

I'm not sure where the reset is meant to be, does the readme tell you when they want the form to clear? Is it after everytime you hit notify or only when the email successfully passed validation?

As for the message, you will need to tell it to reset seperately as reset() only effect form elements (input , textarea etc)

My suggestion would be to create a clear function that does both form.reset() and message.innerText="" and then run that function when needed

0
P
Katrien Sā€¢ 1,070

@graficdoctor

Posted

@iamjmitch It doesn't say in the readme about clearing the form. It was a remark I got on a previous challenge and I've been looking into it since. I'm going to try adjust it, with your feedback. Thanks for helping me šŸ˜€.

0
James Mitchellā€¢ 295

@iamjmitch

Posted

@graficdoctor ah gotcha. Hopefully you can work it out on your own. If not, comment back here and I'm happy to point you in the right direction

0
P
ApplePieGiraffeā€¢ 30,545

@ApplePieGiraffe

Posted

Hey there, Katrien S! šŸ‘‹

It's great to see you complete another challenge! šŸ˜€ Good work on this one! šŸ™Œ Your solution looks good and is responsive! šŸ‘

I noticed that when the input element is focused, the rest of the content below the input element "jumps" down a bit due to the 2px border being added to the input element (which slightly increases its height and width). You can get rid of that and make the focused state appear more smoothly by adding an invisible 2px border to the input element (by setting the border-color to transparent) and simply changing the color of the border to a blue color when the input element is focused. šŸ˜‰

Keep coding (and happy coding, too)! šŸ˜

0

P
Katrien Sā€¢ 1,070

@graficdoctor

Posted

@ApplePieGiraffe Cool! Each time I saw someone use transparent, I though, why not just use none. But then I did indeed notice that my page 'jumped'. I will add that immediately. Thanks once again for the advice šŸ‘

1

Please log in to post a comment

Log in with GitHub
Discord logo

Join our Discord community

Join thousands of Frontend Mentor community members taking the challenges, sharing resources, helping each other, and chatting about all things front-end!

Join our Discord