0

こんにちは、JS と jQuery のメガ マスターです。私は「クリック」機能のトリックにやや混乱しており、問題の説明は jQuery と JS の複雑さにあると思います。

クリックイベントへの標準バインディングがあります

$('.add-button').click( function(event) {
  $.ajax({
    url: 'superentities/new',
    headers: {
      'X-Transaction': 'GET new superentities',
      'X-CSRF-Token': '<%= form_authenticity_token.to_s %>'
    },
    data: {
      entity: event.target.id
    }
  });
});

発信者の ID をコントローラーに送信する場所。しかし、その前$(this).idに、データ ハッシュの代わりにevent.target.id. $(this).idFirebug のウォッチャーは のようでしたが、常に未定義でしたthis->id == some_unundefined_value

この謎を解き明かしてくれる人はいますか?

4

3 に答える 3

1

.idはネイティブJavaScriptメソッド(またはプレーンJavaScriptを介して属性にアクセスする手段)でありid、たとえばノードで機能しますが、はネイティブオブジェクト/ノードから作成されたjQueryオブジェクトです。したがって、使用しているjQueryを取得するには:this$(this)thisid

$(this).attr('id');

ネイティブJavaScriptの場合:

this.id;

この2つを同じように使用することはできません(jQueryオブジェクトはjQueryオブジェクトである間はネイティブDOMで機能せず、ネイティブDOMノード/オブジェクトはjQueryメソッドで機能しません)。

jQueryオブジェクトからDOMノードを取得し、id:を取得するには

$(this)[0].id;
于 2012-09-14T11:24:59.413 に答える
0

これはどう?スコーピングの問題があると思います。$(this) は $('.add-button') ではなく、例では $.ajax を参照しています。

$('.add-button').click( function(event) {
    var id = $(this).attr('id');
    $.ajax({
        data: {
            entity: id
        }
    });
});

または、次のようにすることもできます。

$('.add-button').click( function(event) {
    var self = this; 
    $.ajax({
        data: {
            entity: self.attr('id');
        }
    });
});
于 2012-09-14T11:30:30.447 に答える
0

これを試しましたか

$(this).attr("id");
于 2012-09-14T11:31:50.670 に答える