2011-08-10 6 views
1

フォーム検証を実行しようとしていますが、動作していないようです。私の要素にIDがないため、 getElementsByName &(Robert Nymanによって書かれた)getElementsByClass機能JavaScriptフォームの検証+ IDなしの入力名に基づいてフォームの値を取得する

私のJS:どれsugge http://jsfiddle.net/calebo/rBnwh/

:ここ

 window.onload = function() {  
     var feedbackForm = getElementsByClassName("formBuilder"), 
      feedbackName = document.getElementsByName("form-name")[0], 
      feedbackLocation = document.getElementsByName("form-location")[0], 
      feedbackEmail = document.getElementsByName("form-email")[0], 
      feedbackComment = document.getElementsByName("form-comment")[0]; 

     feedbackForm.onsubmit = function() { 

      var errors, errorDiv, errorUL = []; 

      // check all the fields 
      if (!feedbackName.value.match(/\b\w+\b/)) { errors.push("Please enter your full name"); } 
      if (!feedbackLocation.value.match(/\b\w+\b/)) { errors.push("Please enter your location"); } 
      if (!feedbackEmail.value.match(/^([0-9a-zA-Z]+[\-._+&])*[0-9a-zA-Z_][email protected]([\-0-9a-zA-Z]+[.])+[a-zA-Z]{2,6}$/)) { errors.push("Please enter a correct email address"); } 
      if (!feedbackComment.value.match(/\b\w+\b/)) { errors.push("Please make a comment"); } 

      // if there are errors, display them and cancel submit 
      if (errors.length) { 
       errorDiv = document.querySelector('#feedback-errors') || appendDiv(feedbackForm, {id: 'feedback-errors', innerHTML: '<ul></ul>'}); 
       errorUL = errorDiv.querySelector('ul'); 
       errorUL.innerHTML = errors.map(function (v) { 
        return "<li>#{v}</li>"; 
       }).join(''); 
       return false; 
      } 
      // submit the form 
      return true;  
     };   
    } 

は私のバイオリンは私のマークアップ& JSを示していますjsの書き方を改善する方法も歓迎されています。

ps:jQueryは許可されません。

+0

少し話題外です。 jQueryのようなライブラリを使用する機会はありませんか?それはこの問題をずっと簡単にするでしょう:) – Pelshoff

+0

残念ながら、jQueryの検証プラグインではできませんでした。 – calebo

+0

http://jshint.com/ - > 'getElementsByClassName'が定義されておらず、 'appendDiv'が定義されていません。 – Incognito

答えて

0

メソッドgetElementsByClassNamegetElementsByNameは要素の配列を返します。したがって、特定の要素を使用するにはインデックスを使用する必要があります。

+0

私はgetElementsbyNameを参照してjsを更新しましたが、getelementsByClassNameはカスタム作成関数に従ってインデックスを必要としませんか? – calebo

+0

リンクのページでは、「ネイティブのgetElementsByClassNameとXPathサポートを使用し、通常のループにフォールバックします。ノードリストの代わりに実際の配列を返します。したがって、実際の配列であり、配列からアクセスするには索引付けが必要です。 – Kangkan

+0

@caleb:いくつか変更を加えましたか? – Kangkan

関連する問題