2013-02-20 86 views
1

我有這樣的代碼:焦點文本框的JavaScript驗證失敗

<html> 
    <head> 
     <script type="text/javascript"> 
      function validate(){ 
       var name=document.frm.name.value; 
       if(name.indexOf("A")==0){ 
        alert(name); 
       } 
      } 
     </script> 
    </head> 
    <body> 
     <form name="frm" action="test.php"> 
      Enter name:<input type="text" name="name" onblur="validate()"/> 
      Enter e-Mail:<input type="text" name="email" onblur=""/> 
      <input type="submit"/> 
     </form> 
    </body> 
</html> 

在上面的代碼中,我會嘗試,當他們失去焦點,以驗證文本框。如果名字以A開頭,那麼腳本工作正常。但我想如果用戶輸入不以A開頭的不同名稱,它會將焦點返回到文本框name。爲此,我寫了這個腳本:

<script type="text/javascript"> 
    var name = document.frm.name.value; 
    if(name.indexOf("A") == 0){ 
     alert(name); 
    }else{ 
     document.frm.name.focus(); 
    } 
</script> 

然後它不起作用。

任何人都可以幫忙,我該怎麼做才能請求textfield name的重點?
我對javascript只有一點點的瞭解。

回答

2

只要給你一個id表格,並將其與document.getElementById('form_id')轉介。在這種情況下使用name屬性在十年前已被棄用。另外name對於input應該不是"name",而是使用username或某物。

HTML

<form id="frm" action="test.php"> 
    Enter name:<input type="text" name="username" id="username" onblur="validate()"/> 
    Enter e-Mail:<input type="text" name="email" id="email" onblur=""/> 
</form> 

的JavaScript

function validate(){ 
    var form = document.getElementById('frm'); 
    if (form.username.value.indexOf("A") === 0) { 
     alert(name); 
    } else { 
     form.username.focus(); 
    } 
} 

相反檢索formid的,你也可以通過formvalidate()作爲參數:onblur="validate(this);"。然後使用該參數作爲form在事件處理程序:

function validate(form){ 
    if (form.username.value.indexOf("A") === 0) { 
     alert(name); 
    } else { 
     form.username.focus(); 
    } 
} 

編輯

焦點似乎並不無延遲工作,你可以試試這個(中input有一個id="username"):

function focusTo (elm) { 
    elm.focus(); 
    return; 
} 

function validate(){ 
    var form = document.getElementById('frm'); 
    if (form.username.value.indexOf("A") === 0) { 
     alert(name); 
    } else { 
     alert('error'); 
     setTimeout(function() {focusTo(form.username);}, 10); 
    } 
} 
+0

如果用戶沒有輸入以'A'開頭的名字,該怎麼辦?我將如何專注於文本字段? – 2013-02-20 08:07:13

+0

@MohammadFaisal對不起,忘了......編輯了答案。 – Teemu 2013-02-20 08:10:42

+0

我可以像這樣傳遞文本字段的引用:'onBlur =「validate(this.username)」'? – 2013-02-20 08:44:09

1

modifiy你這樣的腳本

<html> 
    <head> 
     <script type="text/javascript"> 
      function validate(){ 
       var name=document.frm.name.value; 
       if(name.indexOf("A")==0){ 
        alert(name); 
       } 
      } 
     </script> 
    </head> 
    <body > 
     <form id="frm" action="test.php"> 
      Enter name:<input type="text" name="username" onblur="validate()"/> 
      Enter e-Mail:<input type="text" name="email" onblur=""/> 
      <input type="submit" onclick="check()"/> 
     </form> 
     <SCRIPT LANGUAGE="JavaScript"> 
     <!-- 
     function validate() 
     { 
      var name = document.getElementById('frm').username.value; 
      if(name.indexOf("A") == 0){ 
       alert(name); 
         document.getElementById('frm').email.focus(); 
      }else{ 
       document.getElementById('frm').username.focus(); 
      } 
     } 
     function check() 
     { 
      var name = document.getElementById('frm').username.value; 
      if(name.indexOf("A") == 0){ 
      }else{ 
       alert("Please enter a name starting with 'A'"); 
        document.getElementById('frm').username.focus(); 
      } 
     } 
     //--> 
     </SCRIPT> 
    </body> 
</html> 

要在事件onblur執行功能validate()。在腳本中您已經編寫了用於聚焦的代碼,但未將其添加到函數中。

+0

我做了這個,但它不工作 – 2013-02-20 07:58:31

+0

不工作?如果不添加以'A'開頭的單詞,則焦點位於名稱文本字段上。你能解釋不工作嗎? – 999k 2013-02-20 08:01:45

+0

嘗試 代替 cioddi 2013-02-20 08:04:27

0

試試這個document.frm.username.focus();。我希望它會起作用。