最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Javascript form validation: how to force focus to remain on 'incorrect' field? - Stack Overflow

programmeradmin0浏览0评论

I can't believe that I can't find the answer to this question but I really have searched and can't find it! honest!

anyway - here is the question: I am trying to create a validation function for a form that will not permit the user to proceed to the next form field if the field doesn't validate. I just want the 'incorrect' field to have focus until it is 'correct'.

because this is for a JS class I cannot use jQuery or any other framework.

here is one of the HTML fields:

<li>Number 1:<input class="field2" type="text" id="star1" onchange="validateAndDraw(this.value);"></li>

and here is a truncated version of the JS function:

function validateAndDraw(theValue) {                
  if (isNaN(theValue)) {
    alert("no good");
  } else {
      [do stuff here]
  }
}

I have tried using 'this.focus();' and 'this.parentNode.focus();' but no joy.

I am sure the answer is ridiculously simple, but I can't seem to find it.

thanks, bennett

I can't believe that I can't find the answer to this question but I really have searched and can't find it! honest!

anyway - here is the question: I am trying to create a validation function for a form that will not permit the user to proceed to the next form field if the field doesn't validate. I just want the 'incorrect' field to have focus until it is 'correct'.

because this is for a JS class I cannot use jQuery or any other framework.

here is one of the HTML fields:

<li>Number 1:<input class="field2" type="text" id="star1" onchange="validateAndDraw(this.value);"></li>

and here is a truncated version of the JS function:

function validateAndDraw(theValue) {                
  if (isNaN(theValue)) {
    alert("no good");
  } else {
      [do stuff here]
  }
}

I have tried using 'this.focus();' and 'this.parentNode.focus();' but no joy.

I am sure the answer is ridiculously simple, but I can't seem to find it.

thanks, bennett

Share Improve this question asked Nov 11, 2010 at 1:34 Bennett Von BennettBennett Von Bennett 3071 gold badge6 silver badges17 bronze badges 1
  • I thought that using onchange and similar event attributes has been deprecated in favor of binding event handlers via JavaScript (unobtrusively) ... if that is for a JS class, then maybe this could be one of the lessons. :) – Šime Vidas Commented Nov 11, 2010 at 1:40
Add a ment  | 

5 Answers 5

Reset to default 3

Try sending the object reference to the function instead of the value.

So in your input event:

validateAndDraw(this);

And change your function to:

function validateAndDraw(input) {                
  if (isNaN(input.value)) {
    alert("no good");
    input.focus();
  } else {
      [do stuff here]
  }
}

As a side, I would suggest looking into Progressive Enhancement.

document.getElementById('star1').focus();

Using this inside your function will refer back to the function.

Alternatively, you could pass the object in the onclick event:

<input class="field2" type="text" id="star1" onchange="validateAndDraw(this);">

so the function could look like

function validateAndDraw(obj) {
  alert(obj.value);
}

Try calling focus() in the blur event.

Also, this in your function refers to the global context, not the element.
(It only refers to the element inside the inline handler; you are making an ordinary function call from there)
You should change your function to accept the element as a parameter (which you can pass as this insidethe inline handler)

Why not pass in the element?

function validateAndDraw(theElement) {
    var theValue = theElement.value;
    if (isNaN(theValue)) {
        alert("no good");
        theElement.focus()
      } else {
          [do stuff here]
    } 
}

Send as trigger

There are for each loop function for check input in form.

If there are input[x].value = "", so alert and focus in it, next input and next alert

<html>
  <body>

    <form onsubmit="return validateForm(this)">

      Name:     <input type="text"     name="name"><br />
      E-mail:   <input type="text"     name="email"><br />
      Password: <input type="password" name="password"><br />					

      <input type="submit" value="Send">

    </form>

    <script >

      function validateForm(input) {

        for (x in input) {

          if (input[x].value == "") {

            alert(input[x].name + " must be filled out");
            input[x].focus();

            return false;
											
          }			

        }

      }	

    </script>

  </body>
</html>

发布评论

评论列表(0)

  1. 暂无评论