2017-02-25 4 views
0

私は、テキストフィールドが空であるかどうかをチェックし、もしそうならフォーカスを戻すべきであると期待している関数を書いています。チェックは、ユーザーがテキストフィールドから離れたとき(ぼかしの場合)に実行されます。残念ながら、コードは機能しません。それはなぜそうですか?私はplayframeworkを使用しています。問題はJavaScriptコードです。JavaScriptイベントがぼかしイベントに作用しない

@(form:Form[User2]) 

<!DOCTYPE html> 
<html lang="en" xmlns:font-variant="http://www.w3.org/1999/xhtml"> 
<head> 
    <meta charset="UTF-8"> 
    <meta http-equiv="X-UA-COMPATIBLE" content="IE=edge"> 
    <meta name="viewport" content="width=device-width,initial-scale=1"> 
    <title>HTML Test</title> 
    <link rel="stylesheet" type="text/css" href="@routes.Assets.at("stylesheets/bootstrap.min.css")"> 
    <!--link rel="stylesheet" href="stylesheets/bootstrap-theme.min.css"--> 
    <style type="text/css"> 

     html, body{height:100%; margin:0;padding:0} 
<!-- this centers the texts fields --> 
.center-form { 
    width:100%; 
    margin:auto; 
    position:relative; 
    top:50%; 
    transform: translateY(-50%) 
} 


</style> 
<script> 
/*this function works fine and puts the text cursor on first text field*/ 
    function setup(){ 
     var textInput; 
     textInput = document.getElementById('first-name'); 
     textInput.focus(); 
    } 
    var firstName; 
    firstName = document.getElementById('first-name'); 

/*the problem is in this code. I check if the field is empty and if so, I call focus to put focus on that field*/ 
    function validateFirstName(){ 
     var name = firstName.value; 
     if (name.length <= 0) { 
     alert("error"); 
      firstName.focus(); 
     } 
    } 

    window.addEventListener('load',setup,false); 

    firstName.addEventListener('blur',validateFirstName,false); 

</script> 
</head> 
<body> 

<div class="container center-form" > 

    <!-- for medium and large screens, 
    First row of Bootstrap grid contains logo. Total 3 columns (12/4). Logo in middle column--> 

    <div class="row" > 
     <!--empty column--> 
     <div class="col-md-4 col-lg-4" ></div> 

     <!--logo column--> 
     <!--div class="col-md-4 col-lg-4" > 
      <div> 
       <img src="@routes.Assets.at("images/somelogo.png")" alt="Logo" height="64" width="303"> 
      </div> 
     </div--> 
     <!--empty column--> 
     <div class="col-md-4 col-lg-4"></div> 
     </div> 

    <!-- for medium and large screens, 
    Second row of Bootstrap grid contains the form for username and password. Total 3 columns (12/4). --> 
     <div class="row" > 
      <!--empty column--> 
      <div class="col-md-4 col-lg-4"></div> 

      <!--form--> 
      <div class="col-md-4 col-lg-4"> 

      <form onsubmit='return onSubmit(this)'> 
        <div class="form-group"> 
         <label for="first-name">First Name</label> 
         <input type="text" class="form-control" id="first-name" value="@form("name").value" required> 
        </div> 

        <div class="form-group"> 
         <label for="last-name">Last Name</label> 
         <input type="text" class="form-control" id="last-name" value="@form("name").value" required> 
        </div> 

        <div class="form-group"> 
         <label for="email">Email</label> 
         <input type="email" class="form-control" id="email" value="@form("email").value" required> 
        </div> 
        <div class="form-group"> 
         <label for="password">Password</label> 
         <input type="password" class="form-control" id="password" required> 
        </div> 
        <div class="form-group"> 
         <label for="confirm-password">Confirm password</label> 
         <input type="password" class="form-control" id="confirm-password" required> 
        </div> 

        <div class="form-group"> 
         <label for="street-name">Street Name</label> 
         <input type="text" class="form-control" id="street-name" required> 
        </div> 

        <div class="form-group"> 
         <label for="country">Country</label> 
         <input type="text" class="form-control" id="country" required> 
        </div> 

        <button type="submit" class="btn btn-primary">Sign Up</button> 
       </form> 
      </div> 
      <!--empty column--> 
      <div class="col-md-4 col-lg-4"></div> 
     </div> 
</div> 
<!--script src="@routes.Assets.at("javascripts/jquery-1.9.0.min")"></script--> 
<!--script src="@routes.Assets.at("javascripts/bootstrap.min.js")"></script--> 
</body> 
</html> 
+0

'firstName = document.get ...'と 'firstName.addEve ...'をロードイベントリスナー( 'setup '関数)! **ロードされるべきDOMを待つ必要があるDOMと何かを持つ何か**。 –

+0

ありがとうございます。出来た。私が気付いている独特の挙動は、何も入力せずに「ファーストネーム」フィールドから移動すると、一度だけではなくアラートメッセージが連続的に得られます。新しいアラートを停止するには、[このページの新しいボックスの作成を禁止する]を選択する必要がありました。どうして? –

+0

私は 'alert'ダイアログが入力からフォーカスを取ると思うので、毎回アラートが出てくるとブラーイベントが発生し、別のアラートが飛び出します...私は確信していませんが、 ! –

答えて

0

イブラヒムからの提案が働いていた - あなたはfirstNameの= document.get ...とfirstName.addEveを置く必要があります...ロードイベントリスナの内部(セットアップ機能)!ロードされるDOMを待機する必要があるDOM以外のもの

0

私は(私は例を作成するために必要なコードを取ったので、HTML、CSSとスクリプトがあなたから少し異なっている)あなたのためにこれjsfiddleを作りました。

私はあなたが好きなように振る舞うが考える;)

https://jsfiddle.net/f039z59o/2/

(function() { 
    var name = document.getElementById('first-name'); 

    function setup() { 
    name.select(); 
    } 

    function validateFirstName() { 
    if (name.value.length < 1) { 
     name.select(); 
    } 
    } 
    document.addEventListener('ready', setup, false); 
    name.addEventListener('blur', validateFirstName, false); 
    setup(); 
})(); 
+0

あなたの例はjsfiddleで動作しますが、スクリプトを完全にコメントして