1

イベント(クリック、dblclick、キープレスなど)で起動するajax関数がたくさんあります。events.jsファイルの先頭で、ユーザーがクリックする要素のIDを表す変数を定義したいと思います。の上。現在です

$(this).parents('li').attr('data-id')

これまでのところ、私はこの方法を試しました:

var element_id = $(this).parents('li').attr('data-id');

var test = function(id)
{
    ajaxCall(id);
}

$('.js_btn_test').live('click', function()
{
    test(element_id);
}

残念ながら、それは機能しません。.js_btn_testをクリックして、その親'li'として評価され、データIDをフェッチすると、element_id変数が解析されると思いました。

ご協力いただきありがとうございます !

EDIT1:基本的なHTML構造

こんな感じ

<li data-id="<?php echo $item->getId(); ?>">
    <button class="js_btn_test">Test</button>
</li>
4

4 に答える 4

3

いいえ、そのようには機能しません。と...

var element_id = $(this).parents('li').attr('data-id');

...element_id変数に値をすぐthisに割り当てますが、次回その値をチェックするときの値には依存しません。

考えられる回避策の1つは、代わりに関数を使用することです。

var getElementId = function(el) {
  return $(el).parents('li').attr('data-id');
};
...
$('.js_btn_test').live('click', function() {
   test(getElementId(this));
});

...thisイベントハンドラー(渡す匿名関数live)内のように、イベントを発生させた要素を参照します。

補足として、ここに示され、ここで説明されているように、電話.attr('data-id')だけに交換することができます.data('id')

于 2012-09-12T08:20:19.893 に答える
2

私があなたがやろうとしていることを正しく理解しているならid、クリックされた要素に基づいてをフェッチするロジックを変数に入れます。それを関数にしない限り、それは不可能です(その場合、それを変数にする必要はまったくありません)。

例えば:

function getIdFromElement(el) {
    return $(el).parents('li').attr('data-id');
}

$('.js_btn_test').live('click', function()
{
    test(getIdFromElement(this));
}
于 2012-09-12T08:17:20.310 に答える
1

thisまだコンテキストにないため、取得できません。

またlive、jqueryの最新バージョンでは非推奨です。

これはjqueryWebサイトからの抜粋です

jQuery 1.7以降、この.live()メソッドは非推奨になりました。.on()イベントハンドラーをアタッチするために使用します。古いバージョンのjQueryのユーザーは.delegate()、を優先して使用する必要があります.live()

var test = function(id)
{
    ajaxCall(id);
}

$('.js_btn_test').on('click', function()
{
    var element_id = $(this).parents('li').attr('data-id');
    test(element_id);
}
于 2012-09-12T08:25:33.240 に答える
1

this適切なコンテキストで実行される前に、適切に解決することはできません。

var test = function(id)
{
    ajaxCall(id);
}

$('.js_btn_test').live('click', function()
{
    var element_id = $(this).parents('li').attr('data-id');
    test(element_id);

    func01(element_id);
    func02(element_id);
    // etc
}
于 2012-09-12T08:13:46.300 に答える