2009-07-23 6 views
0

これはかなり基本的な質問ですが、私はこの問題に苦しんでいます。jQueryの動的イベントバインディング

私のフォームには、テーブルに新しい行を動的に追加するオプションがあります。これは、jQueryには十分簡単です。要素の1つでは、イベントをバインドする必要があります。これは比較的簡単です。私が問題を抱えている部分は、バインドする必要のあるイベントがパラメータを取らなければならないということです。だから、コードは私が持っている:

$(newrow).find("select").each(function() { 
     var ochange = function(handle){ 
       var thisselect = "select" + handle; 
       var thislink = "link" + handle; 
       var thiscollate = "collate" + handle; 
       if(document.getElementById(thisselect).value == 4){ 
        document.getElementById(thislink).style.visibility = 'visible'; 
       } 
       else{ 
        document.getElementById(thislink).style.visibility = 'hidden'; 
        document.getElementById(thiscollate).value = ""; 
       } 
     }; 
     $(this).change(ochange); 
     $(this).attr("name", "select" + numfields); 
     $(this).attr("id", "select" + numfields); 
    }); 

イベントが期待通りにバインドしますが、(私はこれは正しくない構文であるかなり確信しているので、もちろん)変数が登録していない「ハンドル」。また、動的フォーム要素にバインドしたいこの関数は実際にはすでに定義されているので、すでに定義されている関数(パラメータを取る)を呼び出す方法があれば、それについて聞いてみたいと思います。

答えて

0

あなたのコードでは、 'handle'変数はjQueryオブジェクトで、 '選択'ウィジェットの変更イベントを表します。このイベントを発生させたDOMオブジェクトを取得するには、handle.target属性を使用します。たとえば、その名前を取得するには、handle.target属性を使用します。 target - $(handle.target)のjQueryオブジェクトを取得します。イベントオブジェクトのための

完全なリファレンスは、イベントハンドラ関数の最初のパラメータはevent objectあるhere

0

です。

私が正しく理解していれば、基本的にはochange関数に値を渡したいと思っています。

あなたはjQueryのを持っているので、あなたがその機能でそれを使用し、getElementByIdの呼び出しを避けることができ、コールバック関数のスコープ内の変数handleを宣言し、ochange機能にその値を使用することができます

$(newrow).find("select").each(function() { 

    var handle = "someValue"; // this variable will be accessible inside ochange 

    var ochange = function(){ 
    var thisselect = "select" + handle; 
    var thislink = "link" + handle; 
    var thiscollate = "collate" + handle; 
    if($(thisselect).val() == 4){ 
     $(thislink).css('visibility', 'visible'); 
    } 
    else{ 
     $(thislink).css('visibility', 'hidden'); 
     $(thiscollate).val(''); 
    } 
    }; 

    $(this).change(ochange); 
    $(this).attr("name", "select" + numfields); 
    $(this).attr("id", "select" + numfields); 
}); 
0

あなたは「ヘルパー」機能を提供できます。同時に、複雑な単純なの一種である

$(this).change(function (evt) { 
    ochange('someVal') 
    }); 

別のオプションはです(ソートの何かがjQueryの1.3.3に起こっている?)プラグイン

それによってあなたがこのような何か行うことができます:

var obj = { 
    attr: "blah", 
    myFunc: function(arg){ 
     console.log(this.attr + " " + arg); 
    } 
    } 
    $(this).change($.hitch(obj, "myFunc", "wheee")) 
関連する問題