0

どうやってこれを行うのか本当にわかりません。これはコードの質問というより概念の質問なので、例を投稿します。

object = $('#div');

function doSomething(object) {
    //iterates through a list and creates a UL with items in corresponding to that list.
    $(body).append("<li id='clickme'>Hello world</li>");
}

function createModal(object) {
    //creates modal dialogue.
    doSomething(object);
    //more stuff
}

$('#clickme').live("click", function() {
    //I need access to object (not the object declared at first,
    //the object passed into doSomething) here.

});

どうすればそのようなことをするのでしょうか?doSomething は一連の LI を作成し、それにパラメーターを渡します。関数が作成する LI がクリックされると、doSomething に渡されたパラメーターと対話する必要があります。それらをバインドする方法などはありますか?

意味がわからなかったらごめんなさい。

4

4 に答える 4

5

jquery data関数を使用して、データをDOM要素に関連付けることができます。その後、イベントを処理するときにこれらのデータを読み取ることができます。

別の方法は、一般的には推奨されませんが、1つの大きなパスでhtmlを構築し、DOM要素に簡単にアクセスできず、文字列(またはキー)しかない場合に役立ちます。属性を追加し、後でそれを取得する方法です。jqueryのattr関数。ただし、可能な限り、データ関数を使用することをお勧めします。

于 2012-07-09T15:03:16.537 に答える
2

参照を明示的に保存します。

function doSomething(object) {
    //iterates through a list and creates a UL with items in corresponding to that list.
    $(body).append(
      $("<li/>", { id: 'clickme', text: 'Hello world',})
        .data('object', object)
    );
}

その後、イベント ハンドラーは参照を取得できます。

$('#clickme').live("click", function() {
    var object = $(this).data('object');
    // ...
});

また.live()非推奨です:

$('body').on('click', '#clickme', function() {

委任されたイベント ハンドラーをバインドする最新の方法です。

于 2012-07-09T15:05:34.187 に答える
0
object = $('#div');

function doSomething(object) {
    $(body).append("<li id='clickme'>Hello world</li>");
    $('#clickme').click(function(evt) {
        // Here you have access to `object`
    });
}

function createModal(object) {
    //creates modal dialogue.
    doSomething(object);
    //more stuff
}

これでは不十分かもしれません。id を持つ単一のリンクではなく、複数のリンクを作成する場合はclickme、クリック ハンドラーをアタッチするときに使用する別のセレクターを見つける必要がある場合があります。しかし、そのように関数をネストするとobject、クリック ハンドラが作成されたときに使用されたパラメータにアクセスできます。

于 2012-07-09T15:11:16.927 に答える
0

別のオプションは、クロージャーを介して、パラメーターがスコープ内にある場所でハンドラーを宣言してアタッチすることです (テストされていません)。

function doSomething(object) {
    $(body).append("<li id='clickme'>Hello world</li>").click(function() {
        //object is accessible here
    });
}
于 2012-07-09T15:14:23.197 に答える