0

回答jQuery.data ()関数に値が存在するかどうかを確認する方法

(私の決定ではなく、フォームオブジェクトに大量のデータ値を追加することの妥当性について反対票を投じないでください)

それぞれを使用してjsfiddleを作成しました

これは

Object {v1: "value11", v2: "value2", v3: "value3", v4: "value4", v5: "value5"} fiddle.jshell.net:25
Uncaught TypeError: Object #<Object> has no method 'each'

注:オブジェクトを$(..)でラップすると、どちらも機能しません

$ .eachを使用して$.eachjsfiddleを使用して解決

$(function() {
  $("form[name=update]").data("values", {"v1": "value11", "v2": "value2", "v3": "value3", "v4": "value4", "v5": "value5"});
  $(".but").on("click",function(e) {
    var $fData = $("form[name=update]").data("values");
    var val = $(this).val();
      console.log($fData);
    $fData.each(function(n,i) { 
        console.log("!!!",n,i)
      if (n[i]===val) {
        alert("duplicate value");
        return false;
      }    
    })  
    e.preventDefault()  
  });
});  

タスクで完全に失敗するgrepを使用するjsfiddle 。

$(function() {
  $("form[name=update]").data("values", {"v1": "value11", "v2": "value2", "v3": "value3", "v4": "value4", "v5": "value5"});
  $(".but").on("click",function() {
    var $fData = $("form[name=update]").data("values");
    var val = $(this).val();
    var idx = $.grep($fData, function(n,i) { 
        console.log("n",n); // why no console output for this???
        return n[i]===val; 
    });  
    console.log(idx);  
    if (idx!=-1) {
      alert("duplicate value")
    }
  });
});  

質問:

  1. each返されたオブジェクトで実行できないのはなぜですか
  2. grep私がやっているのはどうですか(以前はgrepを1回だけ使用しました)
  3. 内部からコンソール出力がないのはなぜですかgrep
4

1 に答える 1

4

$.eachはjQueryオブジェクトでのみ使用できるため、オブジェクトをラップする必要があります。

$($fData).each(function (n, i) {

または、次の宛先に渡します$.each

$.each($fdata, function(n, i) {

$.grep()場合、問題は、入力が配列ではなくオブジェクトであるということです。$.grepある種の黙ってあなたに失敗します:

grep: function( elems, callback, inv ) {
    var retVal,
        ret = [],
        i = 0,
        length = elems.length;  // <-- Here's why
    inv = !!inv;

    // Go through the array, only saving the items
    // that pass the validator function
    for ( ; i < length; i++ ) {
        retVal = !!callback( elems[ i ], i );
        if ( inv !== retVal ) {
            ret.push( elems[ i ] );
        }
    }

    return ret;
},
于 2013-01-19T08:06:24.107 に答える