0

だから私は何度も繰り返す必要がある特定の機能を持っています。そこで、再利用できる関数を 1 つだけ作成しようと考えました。

function validate_form(field,validate) {
field.focus(function(){
    $(validate).css('margin-left','206px');
    $(validate).fadeIn();
    $(validate).animate({ 
            'marginLeft': '286px'
            }, 'fast');
    name        = $(field).val();
    alert(name);        
});
}   

関数を呼び出すには、次のようなものを使用します

validation_form('#contact_name','#contact_name_validate');

したがって、ここでのアイデアは、関数に必要な特定のセレクターを通過させることですが、機能させることができないようです。セレクターが関数内の変数として使用されている場合、セレクターを通過させる特別な方法はありますか?

4

3 に答える 3

5

fieldパラメータにセレクタが含まれている場合は、それを関数に渡す必要がありますjQuery()

$(field).focus(function(){

で使用するさまざまなメソッドを連鎖させることで、関数をより効率的にすることもできます$(validate)

function validate_form(field, validate) {
    $(field).focus(function () {
        $(validate).css('margin-left', '206px')
                   .fadeIn()
                   .animate({'marginLeft': '286px'}, 'fast');
        name = this.value;
        alert(name);
    });
}

or$(field).val()を使用できるフォーカス ハンドラー内のポイントでは、既にフォーカスされた要素になるため、 で再度選択する必要はありません。$(this).val()this.value$(field).val()this$(field)

于 2013-05-06T21:04:26.263 に答える
1

fieldjQueryオブジェクトではなく、セレクターを含む文字列です。必要なものは次のとおりです。

$(field).focus(function(){
    /* other stuff in here */
});

ちなみに、このエラーは JavaScript コンソールに表示されるはずです (私の場合、少なくとも Chromium では表示されます)。

TypeError: Object #contact_name has no method 'focus'
于 2013-05-06T21:04:50.600 に答える
0

代わりに jQuery オブジェクトを渡すことができます。これは jQuery オブジェクトをキャッシュするため、複数回取得する必要はありません。

var $field = $('#contact_name');
var $validate = $('#contact_name_validate');

validation_form($field, $validate);

function validate_form($field, $validate) {
    $field.focus(function(){
        $validate.css('margin-left','206px');
        $validate.fadeIn();
        $validate.animate({ 
            'marginLeft': '286px'
        }, 'fast');
        name = $field.val();

        alert(name);        
    });
}   
于 2013-05-06T21:06:46.993 に答える