2016-09-23 46 views
1

は、私は、入力フィールドは、それはちょうどjQueryのコレクションはjQueryのは、

$('#form').find('.email').filter(hasValue); 


をフィルタリングするために正常に動作

function hasValue() { 
    if (!!$.trim($(this).val())) 
     return true; 
} 

空であるかないかどうかを確認する、この関数を定義してチェックします しかし、私はまた、クラスをトグルするためにhasValue()関数を再利用したいと思います。

$('.input').change(function() { 
    var empty = hasValue().apply($(this)); //throws an error 
    // var empty = $(this).hasValue();  //doesn't work either 
    $('#box').find('.required-tmp').toggleClass('required', empty); 
}); 

助けてください。

答えて

1

ジャスティスがこれを適用します。そして、実行しません()の前に:

hasValue.apply(this); 

あなたの機能の活用を持ちたい場合は、それはそれは、このようなthisを使用するには、良好なパターンではありませんパラメータとして要素を受け入れなければなりません。引数

function hasValue(elem) { 
    return !!$.trim($(elem).val()); 
} 

の要素を渡すことを好むそして使い方は、マップでも同じです:

$('#form').find('.email').filter(hasValue); 

そして、なぜあなたはhasValueはメソッドで二重否定を使用している

$('.input').change(function() { 
    var empty = hasValue(elem); //throws an error 
    $('#box').find('.required-tmp').toggleClass('required', empty); 
}); 
1
$('.input').change(function() { 
    var empty = hasValue.apply($(this)); //apply function should be used this way . 
    // var empty = $(this).hasValue();  //doesn't work either 
    $('#box').find('.required-tmp').toggleClass('required', empty); 
}); 
+0

おかげで、これはOPが提供されたコードと同じです! –

1

第二に、使用することは、のように適用されます。

var empty = hasValue.apply(this); 

これは、あなたがそこに使用できるパラメータとしての要素を渡します!それはあなたのために働くかどうかを確認し

if(typeof $(this).val !== 'undefined'){ 
return true; 
} 

第三に、値が存在するかどうかをチェックするために、あなただけのように代わりにトリムの型チェックを使用することができます!

0

fn.apply構文は次のとおり)(代わりにhasValueはのhasValue.apply($(この))のようにする必要があります。($(この))を適用

それはあなたの問題を解決しますように。 &よろしく、 チャーリー