7

jQuery$.eachのループでスコープの問題が発生しています。関数でグローバル変数を取得してループに設定するか、少なくとも何かを渡すにはどうすればよいですか?

var some_function = function() {

    // false by default
    var something = false;

    $.each(array, function(key, val) { 
       if (val == 'something')
       {
         // even if one item evaluates true I need to check outside of the loop
         something = true;
       }
    });

    if (something == true)
    {
       // do something else, but always false
    }
}

配列内のすべてのアイテムを評価する必要があるため、が 1 つだけの場合は true$.each.

アップデート

$(document).ready(function () {
    something(); 
    $(':radio').trigger('change');
)};

さて、これが実際のコードです。一番下に'false'とアラートが表示され、次に'hello'と 2 回アラートが表示されます。まるで逆の順序になっているようです。

var something = function() {   

        var q_radios = {
            'radio1'        : 'radio1_selector', 
            'radio2'        : 'radio2_selector',  
        };
        var show_me = false;

        $.each(q_radios, function(name, q_selector) {  
            $('input:radio[name=' + q_selector + ']').change(function() {  
                    show_me = true; 
                    alert('hello'); 
            }); 
        });   

        if (show_me == true)
        {
            alert('yes');
        }
        else
        {
            alert('false');
        }

};
4

2 に答える 2

5

多かれ少なかれ、あなたが今持っているものとまったく同じです…あなたはただデータを関数に渡す必要があります(それが引数を受け入れるようにすることによって)。実例を参照してください。

var some_function = function(array) { 

    // false by default
    var something = false;
    $.each(array, function(key, val) {
        if (val == 'something') {
            something = true;
        }
    });

    if (something == true) {
        alert("There was a something");
    } else {
        alert("There wasn't a something");
    }
};

some_function([1,2,3]);
some_function([1,"something",3]);
​
于 2012-06-01T15:58:25.380 に答える
2

ネイティブの配列反復メソッドをお勧めします。

var something = array.some(function ( val ) {
   return val === 'something';
});

ここで、少なくとも 1 つの配列要素が値を持つ場合はになりsomethingます。true'something'

于 2012-06-01T16:02:19.167 に答える