2017-01-03 8 views
0

配列を検索して、targetの値が一致するかどうかを調べようとしています。文字列の一部の配列を検索

(function ($) { 
 
    
 
    $.fn.validate = function (x) { 
 

 
     return this.each(function() { 
 

 
      var wrapper = $(this); 
 

 
      var xx = $.extend({ 
 
       obj: "", 
 
      }, x || {}); 
 

 
      function initialized() { 
 

 
       $(wrapper).children().bind('keyup', function (e) { 
 
        
 
        console.log($.grep(xx.obj, function (t) { return t.target.indexOf($(e.target).attr("name")) })); 
 

 
       }); 
 

 
      } 
 
      initialized(); 
 
     }); 
 
    }; 
 

 
}(jQuery)); 
 
$('form').validate({ obj: [{ "target": "name=Username", "required": true, "xmin": "5", "xmax": "16" }, { "target": "name=Email", "required": true, "xmin": "5", "xmax": "16" }] });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form class="form"> 
 
        <input name="Username" placeholder="Username" /> 
 
        <input name="Email" placeholder="Email" /> 
 
        <input type="button" value="Save" /> 
 
       </form>

このライン:$.grep(xx.obj, function (t) { return t.target == $(e.target).attr("name") }).length戻り、一致が見つかった場合。私はそれが==と言うことを知っているので、それがきちんと一致する場合にのみ一致を返します。 $.grep(xx.obj, function (t) { return t.target.contains($(e.target).attr("name")) }).length

編集 Z-骨の回答と一致するように変更コード:

が、それはこのような何かを作るためにそれがかのうです。入力フィールドにユーザーのタイプは、それがその入力からName($(e.target).attr("name"))を取り、値がobj.targetのいずれかに一致するかどうかを確認するために​​を検索するときは、まだ正しく

動作しません。

答えて

0

解決策が見つかりました。

$.grep(xx.obj, function (t) { 
    return t.target.split('=')[1] == $(e.target).attr(t.target.split('=')[0]) 
})[0] 

(function ($) { 
 

 
    $.fn.validate = function (x) { 
 

 
     return this.each(function() { 
 

 
      var wrapper = $(this); 
 

 
      var xx = $.extend({ 
 
       obj: "", 
 
      }, x || {}); 
 

 
      function initialized() { 
 

 
       $(wrapper).bind('keyup', function (e) { 
 

 
        console.log($.grep(xx.obj, function (t) { 
 
         return t.target.split('=')[1] == $(e.target).attr(t.target.split('=')[0]) 
 
        })[0]); 
 

 

 
       }); 
 

 
      } 
 
      initialized(); 
 
     }); 
 
    }; 
 

 
}(jQuery)); 
 
$('form').validate({ obj: [{ "target": "name=Username", "required": true, "xmin": "5", "xmax": "16" }, { "target": "name=Email", "required": true, "xmin": "5", "xmax": "16" }] });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form class="form"> 
 
        <input name="Username" placeholder="Username" /> 
 
        <input name="Email" placeholder="Email" /> 
 
        <input type="button" value="Save" /> 
 
       </form>

0

indexOfを使用すると、文字列に値が含まれているかどうかを確認できます。 あなたのニーズが正しく理解されている場合は、入力値全体がJSONオブジェクトのターゲットキーのいずれかに含まれているかどうかを確認する必要があります。
これを行うには、各キーイベントをテストしないでください。これは、各キーイベントごとに1文字をテストするためです。
keyupイベントが発生するたびに完全な入力値を取得し、配列内のターゲットキーのいずれかに存在するかどうかをテストします。

次のコードでは、コードをわずかに変更して、どこでこのコードを使用するのかを確認しました。私はユーザ名の入力値がJSONに含まれているかどうかだけを確認するためにテストします。テストする電子メール入力値を追加することもできます。

私はHTMLとJS

(function($) { 
 
    $.fn.validate = function(x) { 
 
     return this.each(function() { 
 
      var wrapper = $(this); 
 
      var xx = $.extend({ 
 
       obj: "", 
 
      }, x || {}); 
 

 
      function initialized() { 
 
       $(wrapper).children().bind('keyup', function(e) { 
 
        var userNameValue = $('#username').val(); 
 
        console.log($.grep(xx.obj, function(t) { 
 
         return (t.target.indexOf(userNameValue) > -1); 
 
        }).length); 
 
       }); 
 
      } 
 
      initialized(); 
 
     }); 
 
    }; 
 

 
}(jQuery)); 
 
$('form').validate({ 
 
    obj: [{ 
 
     "target": "name=Username", 
 
     "required": true, 
 
     "xmin": "5", 
 
     "xmax": "16" 
 
    }, { 
 
     "target": "name=Email", 
 
     "required": true, 
 
     "xmin": "5", 
 
     "xmax": "16" 
 
    }] 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form class="form"> 
 
    <input id="username" name="Username" placeholder="Username" /> 
 
    <input name="Email" placeholder="Email" /> 
 
    <input type="button" value="Save" /> 
 
</form>

の両方を変更しますのでご注意くださいあなたは、これが参考願っています。

+0

私は 'indexOf'を使用するように私のコードを変更しますが、それは正しく100%いけない仕事。 attrを検索すると、配列内の両方のオブジェクトが返されます。 (コードを実行するとあなたが表示されます)。 –

+0

最終結果を入手してください。私は文字列を達成することについて説明しようとしたが... –

関連する問題