JavaScript中的焦点功能

时间:2014-03-28 11:51:26

标签: javascript html

HTML代码:

<html>

<head>
    <title>Registration</title>
        <meta charset="utf-8">
        <link href="home.css" rel="stylesheet" type="text/css"/>
        <link href="booking.css" rel="stylesheet" type="text/css"/>
        <script src="val_registration.js" type="text/javascript"></script>
        <link rel="stylesheet" href="jquery.css">
        <script src="jquery01.js" type="text/javascript"></script>
        <script src="jquery02.js" type="text/javascript"></script>
    <script>
    $(function() {
    $( "#datepicker" ).datepicker();
    });
    </script>

    <script language="JavaScript1.2">
    var howOften = 5; //number often in seconds to rotate
    var current = 0; //start the counter at 0
    var ns6 = document.getElementById&&!document.all; //detect netscape 6

    // place your images, text, etc in the array elements here
    var items = new Array();
    items[0]="<a href='link.htm'><img alt='photo01' src='photo01.jpg' height='237' width='750' border-style='inset' border-weight:'10px' /></a>"; //a linked image
    items[1]="<a href='link.htm'><img alt='photo02' src='photo02.jpg' height='237' width='750' border-style='inset'  border-weight:'10px'/></a>"; //a linked image
    items[2]="<a href='link.htm'><img alt='photo03' src='photo03.jpg' height='237' width='750' border-style='inset'  border-weight:'10px'/></a>"; //a linked image
    items[3]="<a href='link.htm'><img alt='photo04' src='photo04.jpg' height='237' width='750' border-style='inset'  border-weight:'10px'/></a>"; //a linked image
    items[4]="<a href='link.htm'><img alt='photo05' src='photo05.jpg' height='237' width='750' border-style='inset'  border-weight:'10px'/></a>"; //a linked image

    function rotater() {
        document.getElementById("placeholder").innerHTML = items[current];
        current = (current==items.length-1) ? 0 : current + 1;
        setTimeout("rotater()",howOften*1000);
    }

    function rotater() {
        if(document.layers) {
            document.placeholderlayer.document.write(items[current]);
            document.placeholderlayer.document.close();
        }
        if(ns6)document.getElementById("placeholderdiv").innerHTML=items[current]
            if(document.all)
                placeholderdiv.innerHTML=items[current];
                current = (current==items.length-1) ? 0 : current + 1; //increment or reset
                setTimeout("rotater()",howOften*1000);
    }
    window.onload=rotater;
    </script>
</head>

<body>
    <div id="login" name="login">
        &nbsp <a href="login.htm" target="_self"> Login</a>&nbsp&nbsp<b><b>|</b></b>
        &nbsp<a href="signup.htm" target="_self">New user?</a>&nbsp&nbsp
    </div>

    <img src="logo.jpg" alt="logo" id="logo" width="500" height="100" usemap="#logomap"/></br>
    <map id="logomap" name="logomap">
        <area shape="rect" coords="0,0,743,146" href="home.htm" alt="home"/>
        <area shape="default" coords"0,0,743,146" href="home.htm" alt="home"/>
    </map></br>

    <div id="placeholderdiv"></div><br/>

    <div id="mlink" >
        <a href="home.htm" target="_self" id="home"> Home </a>
        <a href="aboutus.htm" target="_self" id="aboutus"> About Us </a>
        <a href="promotion.htm" target="_self" id="promotion"> Promotion </a>
        <a href="contactus.htm" target="_self" id="contactus"> Contact Us </a>
        <a href="faqs.htm" target="_self" id="faqs"> FAQs </a>  
    </div><br/>

    <div id="opac">
        <h1> Registration </h1>
    <hr/>
        <form action="success(registration_page).html" method="post" id="myform" onsubmit="return val_registration ()"> 
        <table rules="none" cellpadding="10px" cellspacing="10px">
        <tr>
            <td><label for="Username">Username(No case sensitive):<span id="imp">*</span></label></td><td><input type="text" id="Username" tabindex="1"/>
            <br/><span class="eg">&nbsp;eg:ZerOGravitY</span></td>
        </tr>

        <tr>
            <td><label for="Password">Password(Must more than<br/> 8 characters):<span id="imp">*</span></label></td><td><input type="text" id="Password" tabindex="2"/>
            <br/><span class="eg">&nbsp;eg:567834gravity</span></td></td>
        </tr>

        <tr>
            <td><label for="Retype_password">Retype password:<span id="imp">*</span></label></td><td><input type="text" id="Retype_password" tabindex="3"/>
            <br/><span class="eg">&nbsp;eg:567834gravity</span></td></td>
        </tr>

        <tr>
            <td><label for="First_name">First name:<span id="imp">*</span></label></td><td><input type="text" id="First_name" tabindex="4"/>
            <br/><span class="eg">&nbsp;eg:Loh</span></td></td>
        </tr>

        <tr>
            <td><label for="Last_name">Last name:<span id="imp">*</span></label></td><td><input type="text" id="Last_name" tabindex="5"/>
            <br/><span class="eg">&nbsp;eg:Le You</span></td></td>
        </tr>

        <tr>
            <td><label for="ID_number">ID number (Please omit '-') :<span id="imp">*</span></label></td><td><input type="text" id="ID_number" maxlength="12" tabindex="6"/>
            <br/><span class="eg">&nbsp;eg:940731140991</span></td></td>
        </tr>

        <tr>
            <td><label for="datepicker">DOB:<span id="imp">*</span></label></td>
            <td><input type="text" id="datepicker" tabindex="7"/></td>
        </tr>

        <tr>
            <td>Mobile number:<span id="imp">*</span></td>
            <td colspan="3">
                <select tabindex="8">
                    <optgroup label="Prefix">
                    <option value="010">010</option>
                    <option value="012">012</option>
                    <option value="013">013</option>
                    <option value="016">016</option>
                    <option value="017">017</option>
                    <option value="018">018</option>
                    <option value="019">019</option>
                    </optgroup>
                </select>
                <input type="text" id="Mobile_number" tabindex="9"/>
                <input type="text" class="err" id="err_Mobile_number" readonly="readonly"/>
                <br/><span class="eg">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eg:2345678 or 23456789</span>
            </td>
        </tr>

        <tr>
            <td><label for="E_mail">E-mail:<span id="imp">*</span></label></td>
            <td><input type="text" id="E_mail" tabindex="10"/>
            <br/><span class="eg">&nbsp;eg:abc123@hotmail.com</span></td></td>
        </tr>

        <tr>
            <td colspan="4"><input type="submit" value="Confirm" id="confirm2" tabindex="11" />
            <input type="reset" value="Cancel" id="cancel2" tabindex="12"/></td>
        </tr>

        <tr>
            <td>Notes: <span id="imp">*</span> indicates the column that must be filled</td>
        </tr>
    </table>
    </form>
    </div>

    <hr/>
    <b><i id="copyright">Copyrighted : &#169;  2014  I &hearts; Travels agency. </i></b>
    <b><address id="address"> Address : I love agency, Taman Setapak,  Jalan Genting Klang, 53300 Kuala Lumpur </address></b>
</body>

</html>

这是我的JavaScript代码(用于表单验证):

function val_registration ()

{
    var val_Username = document.getElementById("Username").value;
    var string_Username = /^[a-zA-Z0-9]{1,}$/;

    var err = "";

    if (val_Username == null || val_Username == "" || !string_Username.test(val_Username))

    {
        err += "\u2022Username cannot be blank/Username can contain\n alphabets or numbers only.\n";    

        document.getElementById("Username").focus();
    }

    var val_Password = document.getElementById("Password").value;
    var string_Password = /^[a-zA-Z0-9]{9,}$/;

    if (val_Password == null || val_Password == "" || !string_Password.test(val_Password))

    {
        err += "\u2022Password cannot be blank/Password can contain\n alphabets or numbers only and it must contain at \n least 9 characters.\n";

        document.getElementById("Password").focus();
    }

    var val_Retype_password = document.getElementById("Retype_password").value;

    if (val_Retype_password == null || val_Retype_password == "" || val_Retype_password != val_Password)

    {
        err += "\u2022Retype password cannot be blank/Retype password\n must same with password typed.\n";

        document.getElementById("Retype_password").focus();
    }

    var val_First_name = document.getElementById("First_name").value;
    var string_First_name = /^[a-zA-Z]{1,}$/;

    if (val_First_name == null || val_First_name == "" || !string_First_name.test(val_First_name))

    {
        err += "\u2022Firstname cannot be blank/Firstname can contain \u00A0alphabets only.\n";

        document.getElementById("First_name").focus();
    }

    var val_Last_name = document.getElementById("Last_name").value;
    var string_Last_name = /^[ a-zA-Z@'\-_()\.,]{1,}$/;

    if (val_Last_name == null || val_Last_name == "" || !string_Last_name.test(val_Last_name))

    {
        err += "\u2022Lastname cannot be blank/Lastname can contain\n alphabets or special symbols(@ ' - _ ( ).,) only.\n";

        document.getElementById("Last_name").focus();
    }   

    var val_ID_number = document.getElementById("ID_number").value;
    var string_ID_number = /^[0-9]{12}$/;

    if (val_ID_number == null || val_ID_number == "" || !string_ID_number.test(val_ID_number))

    {
        err += "\u2022Id number cannot be blank/Id number can contain\n excatly 12 numbers only.\n";

        document.getElementById("ID_number").focus();
    }   

    var val_datepicker = document.getElementById("datepicker").value;

    if (val_datepicker == null || val_datepicker == "")

    {
        err += "\u2022DOB cannot be blank.\n";

        document.getElementById("datepicker").focus();
    }   

    var val_Mobile_number = document.getElementById("Mobile_number").value;
    var string_Mobile_number = /^[0-9]{7,8}$/;

    if (val_Mobile_number == null || val_Mobile_number == "" || !string_Mobile_number.test(val_Mobile_number))

    {
        err += "\u2022Mobile number cannot be blank/Mobile number can\n \u00A0contain 7 or 8 numbers only.\n";

        document.getElementById("Mobile_number").focus();
    }   

    var val_E_mail = document.getElementById("E_mail").value;
    var atpos = val_E_mail.indexOf("@");
    var dotpos = val_E_mail.lastIndexOf(".");

    if (atpos<1 || dotpos<atpos+2 || dotpos+2 >= val_E_mail.length)

    {
        err += "\u2022E-mail cannot be blank/E-mail format must follow\n \u00A0the example provided.\n";

        document.getElementById("E_mail").focus();
    }

    if (err != null || err != "")

    {
        alert(err);

        return false;
    }
}

除了一件事之外,这个工作正常:

当所有字段都为空时,会弹出一个警告框以指示错误。但是,点击“确定”后,它会直接移至 DOB 字段,而不是 用户名字段。

当我点击确定时,我希望它验证并关注序列中未填充或无效的第一个元素。

例如:如果用户名和密码字段均为空,我点击确定,则焦点应首先转到用户名字段。

2 个答案:

答案 0 :(得分:1)

每次验证检查后,您需要 return false;

试试这个:

<强> EDIT1:

function val_registration()
{
    var $invalidInput;
    var val_Username = document.getElementById("Username").value;
    var string_Username = /^[a-zA-Z0-9]{1,}$/;

    var err = "";

    if (val_Username == null || val_Username == "" || !string_Username.test(val_Username))
    {
        err += "\u2022Username cannot be blank/Username can contain\n alphabets or numbers only.\n";
        var $input = document.getElementById("Username");
        $invalidInput=$input;
    }

    var val_Password = document.getElementById("Password").value;
    var string_Password = /^[a-zA-Z0-9]{9,}$/;

    if (val_Password == null || val_Password == "" || !string_Password.test(val_Password))
    {
        err += "\u2022Password cannot be blank/Password can contain\n alphabets or numbers only and it must contain at \n least 9 characters.\n";
        if($invalidInput==undefined){
          var $input = document.getElementById("Password");        
          $invalidInput=$input;
        }
    }

    var val_Retype_password = document.getElementById("Retype_password").value;

    if (val_Retype_password == null || val_Retype_password == "" || val_Retype_password != val_Password)

    {
        err += "\u2022Retype password cannot be blank/Retype password\n must same with password typed.\n";
         if($invalidInput==undefined){
          var $input = document.getElementById("Retype_password");        
          $invalidInput=$input;
        }        
    }

    var val_First_name = document.getElementById("First_name").value;
    var string_First_name = /^[a-zA-Z]{1,}$/;

    if (val_First_name == null || val_First_name == "" || !string_First_name.test(val_First_name))

    {
        err += "\u2022Firstname cannot be blank/Firstname can contain \u00A0alphabets only.\n";

        if($invalidInput==undefined){
          var $input = document.getElementById("First_name");        
          $invalidInput=$input;
        }  
    }

    var val_Last_name = document.getElementById("Last_name").value;
    var string_Last_name = /^[ a-zA-Z@'\-_()\.,]{1,}$/;

    if (val_Last_name == null || val_Last_name == "" || !string_Last_name.test(val_Last_name))

    {
        err += "\u2022Lastname cannot be blank/Lastname can contain\n alphabets or special symbols(@ ' - _ ( ).,) only.\n";

        if($invalidInput==undefined){
          var $input = document.getElementById("Last_name");        
          $invalidInput=$input;
        }
    }

    var val_ID_number = document.getElementById("ID_number").value;
    var string_ID_number = /^[0-9]{12}$/;

    if (val_ID_number == null || val_ID_number == "" || !string_ID_number.test(val_ID_number))

    {
        err += "\u2022Id number cannot be blank/Id number can contain\n excatly 12 numbers only.\n";
         if($invalidInput==undefined){
          var $input = document.getElementById("ID_number");        
          $invalidInput=$input;
        }
    }

    var val_datepicker = document.getElementById("datepicker").value;

    if (val_datepicker == null || val_datepicker == "")

    {
        err += "\u2022DOB cannot be blank.\n";

        if($invalidInput==undefined){
          var $input = document.getElementById("datepicker");        
          $invalidInput=$input;
        }
    }

    var val_Mobile_number = document.getElementById("Mobile_number").value;
    var string_Mobile_number = /^[0-9]{7,8}$/;

    if (val_Mobile_number == null || val_Mobile_number == "" || !string_Mobile_number.test(val_Mobile_number))

    {
        err += "\u2022Mobile number cannot be blank/Mobile number can\n \u00A0contain 7 or 8 numbers only.\n";

        if($invalidInput==undefined){
          var $input = document.getElementById("Mobile_number");        
          $invalidInput=$input;
        }
    }

    var val_E_mail = document.getElementById("E_mail").value;
    var atpos = val_E_mail.indexOf("@");
    var dotpos = val_E_mail.lastIndexOf(".");

    if (atpos < 1 || dotpos < atpos + 2 || dotpos + 2 >= val_E_mail.length)

    {
        err += "\u2022E-mail cannot be blank/E-mail format must follow\n \u00A0the example provided.\n";
          if($invalidInput==undefined){
          var $input = document.getElementById("E_mail");        
          $invalidInput=$input;
        }
    }

    if (err != null || err != "")
    {
        $invalidInput.focus();
        alert(err);
        return false;
    }
}

为什么之前没有工作:

您的脚本正在检查每个元素设置焦点,并根据每个元素的需要添加错误消息,直到列表中的最后一个元素。焦点状态一次只能对页面上的单个元素激活。由于最后一个错误元素每次都为所有元素接收焦点,因此它从未在第一个元素处停止。

我做了什么:

在更新的脚本中:我使用一个变量来存储无效元素的引用。一旦代码找到无效元素,它就会将其分配给变量$ invalidElement。它对每个元素都是一样的。所以这种方式$ invalidElement总是一次引用第一个错误元素,而每次都会将错误添加到错误列表中。
最后,它检查错误是否为空。它是,关注第一个错误元素并显示错误信息。

这很简单!

希望它有所帮助!

答案 1 :(得分:0)

通常在HTML上,元素的焦点顺序取决于tabindex属性。

但是,如果你想避免&#34;自然&#34;或者你的聚焦的tabindex顺序定义,你可以随时使用

yourObject.focus(); 

只需定义您要控制的情境以及发生时需要应用的行为。