2

i want to check if values of a form is empty or not? i am trying to write my own validator after many validators like jquery.ketchup.0.3.2 failed me (or maybe i failed them ) but i cant make this function to work.

function validate() {
    alert("hmmm");
    var inputs = document.forms["register"].getElementsByTagName("input");
    for (var item in inputs) {
        if(item.value.trim() == "")
            alert("nullField");
    }
}

would you please tell me what is wrong with the above function?

4

4 に答える 4

3

jQuery を使用する場合は、 jQuery を使用します

validate(){
  var $inputs = $('input', 'form[name="register"]');
  $inputs.each(function(){
    var val = $.trim(this.value);
    if(!val.length){
       // Not valid
    }
  });
}
于 2013-04-23T13:44:43.907 に答える
3

forそれがあなたが使用したループであるかどうか疑問に思っています。コレクション (配列) をループするには、.forではなく通常のループを使用しfor inます。多分これはそれを修正します:

function validate() {
    alert("hmmm");
    var inputs = document.forms["register"].getElementsByTagName("input");
    for (var i = 0; i < inputs.length; i++) {
        if(inputs[i].value.trim() == "")
            alert("nullField");
    }
}

.trim()すべてのブラウザーで利用できるわけではないことに注意してください: http://kangax.github.io/es5-compat-table/#String.prototype.trim

おそらく好ましいjQueryの代替手段は、次のようなものを使用することです。

$('form[name="register"]').find('input[type="text"]').each(function () {
    var $this = $(this);
    if (!$.trim($this.val())) {
        // Left empty
    }
});

参考文献:

于 2013-04-23T13:44:54.317 に答える
0

JavaScript のみを使用する場合:

まず、trim 関数が定義されていることを確認します。

if(!String.prototype.trim) {
  String.prototype.trim = function () {
    return this.replace(/^\s+|\s+$/g,'');
  };
}

実際の機能については次のとおりです。

 function validate() {
    var inputs = document.forms["register"].getElementsByTagName("input");
    for (var i = 0, len = inputs.length; i < len ; i++) {
        if(inputs[ i ].value.trim() == ""){
            // Validation failed
        }
    }
    // Validation successful
}
于 2013-04-23T13:57:28.743 に答える
-2

独自の検証を作成しないことを強くお勧めします (強く言います)。それにもかかわらず、コードにはいくつか問題があります。

  1. for..var..in コンストラクトは、オブジェクトのすべてのプロパティを反復処理します。したがって、オブジェクトはand (値ではなくプロパティ)foo = { bar: '0', baz: '1'}を反復処理します。値を取得したい場合は、 を実行する か、例で.barbazfor(var i in foo){ console.log(foo[i]);}inputs[item].value
  2. getElementsByTagName戻り値 a NodeList(こちらを参照)。NodeListには、リスト内の要素の横に追加のプロパティがあります。

jQuery を使用している場合は$("#register input").val()、関連する値の配列を取得するだけで、$.map関数を使用して各値に対して何かを実行できます。

于 2013-04-23T13:58:50.683 に答える