2016-11-25 2 views
-1

Javascriptのフォーム検証イベント

は、私は、文字列の長さが

<form id="contact"> 
     <input id="name" name="name" type="text" class="feedback-input" placeholder="Name"/> <span id="spanName"> </span> 
     <input name="email" type="text" class="feedback-input" placeholder="Email" /> 
     <textarea name="text" class="feedback-input" placeholder="Message..."></textarea> 
     <input type="submit" value="SUBMIT"/> 
    </form> 





    window.onload = function() { 
     var name = document.getElementById("name"); 
     var nameVal = name.value; 
     var spanName = document.getElementById("spanName"); 
     spanName.innerHTML = "&#10007;"; 

     name.addEventListener('keydown', function() { 
     validate(); 
     }); 

     function validate() { 
     console.log(name); 
     console.log(nameVal); 
     if (nameVal.length > 0) { 
      spanName.innerHTML = "&#10004;"; 
     } else if (nameVal.length > 8) { 
      spanName.innerHTML = "name is to long"; 
     } else { 
      spanName.innerHTML = "yolo"; 
     } 
     console.log(nameVal); 
     } 
    } 
+0

ようこそスタックオーバーフロー!良い質問をするのを助けるために私たちの[SO Question Checklist](http://meta.stackoverflow.com/questions/260648/stack-overflow-question-checklist)をよく読んで、良い答えを得てください。 –

+0

私は何を間違えたのですか? –

+0

あなたは本当に何も尋ねなかった。 「私はXが欲しい」という質問は問題ではなく、それは声明です。 –

答えて

1

文字の一定量である変数のスコープが重要な場合に更新するスパンをしたいと思います。

window.onloadの内部には、に値を割り当てるために、1回だけnameを使用します。

validateの中には、a global variable already provided by the browserというnameが使用されています(他の機能に対してローカルであると宣言した変数ではありません)。これは文字列なので、長さは変わりません。

// Create an IIFE to create a new (non-global) scope for all your variables. 
 
(function() { 
 

 
    // Declare your variables at a level all the functions can reach them 
 
    var spanName, name; 
 

 
    // Get the DOM elements when the load event fires 
 
    function getDomElements() { 
 
    name = document.getElementById("contact").elements.name; 
 
    spanName = document.getElementById("spanName"); 
 

 
    name.addEventListener("keyup", validate); 
 
    } 
 

 
    window.addEventListener("load", getDomElements); 
 

 
    // Define your validation function 
 
    // Check the VALUE of the form control, not the form control itself 
 
    function validate() { 
 
    // Make sure you exclude values you want a later condition to match 
 
    if (name.value.length > 0 & name.value.length <= 8) { 
 
     spanName.innerHTML = "&#10004;"; 
 
    } else if (name.value.length > 8) { 
 
     spanName.innerHTML = "name is to long"; 
 
    } else { 
 
     spanName.innerHTML = "yolo"; 
 
    } 
 
    } 
 
})();
<form id="contact"> 
 
    <input id="name" name="name" type="text" class="feedback-input" placeholder="Name" /> <span id="spanName"> </span> 
 
    <input name="email" type="text" class="feedback-input" placeholder="Email" /> 
 
    <textarea name="text" class="feedback-input" placeholder="Message..."></textarea> 
 
    <input type="submit" value="SUBMIT" /> 
 
</form>

+0

これは正解のようですが、あなたはIIFEをもっと複雑にしていませんか? – Mikey

+0

Quentinありがとう、コメントは本当に役立ちます、私はIIFEのことを聞いたことがなかった –

0

申し訳ありませんが、これが答えです:

var contact, spanName; 
window.onload = function() { 
    spanName = document.getElementById("spanName"); 
    contact = document.getElementById("name"); 
    contact.onkeyup = validate; 
} 
function validate() { 
    var name = contact.value; 
    var length = name.length; 
    if (length > 0 && length <=8) { 
     spanName.innerHTML = "&#10004;"; 
    } else if (length > 8) { 
     spanName.innerHTML = "name is to long"; 
    } else { 
     spanName.innerHTML = "yolo"; 
    } 
} 

それはあなたに動作しますか?

+0

私は誰かがここで1つポイントを減らしたのを見ました。非常に不快な状況。 –

関連する問題