2012-05-14 13 views
22

Mam dwa przyciski opcji na stronie, które są umieszczone w updatepanel. Napisałem dla nich zdarzenie click z jQuery tak:

$(document).ready(function() { 
    $(".inputs").click(function() { 
     alert($(this).id); 
    }); 
}); 

ale zwraca niezdefiniowane. Jaki jest problem?

EDIT: 

     alert(" or " + $(this).attr("id")); 
alert(this.id); 

Te dwie linie zwracają null!

+1

zawsze wykorzystać console.log(); Byłoby znacznie łatwiejsze. W twoim przykładzie możesz użyć: console.log (this); I pokazuje wszystkie dane (id, className itp.) – Min2liz

Odpowiedz

25

Innym rozwiązaniem (tak widziałem go):

$(function() { 
    $(".inputs").click(function (e) { 
     alert(e.target.id); 
    }); 
}); 

HTH.

4

$(this) to obiekt jQuery, który owija element DOM this, a obiekty jQuery nie mają właściwości id. Prawdopodobnie chcesz tylko this.id, aby uzyskać atrybut kliknięcia elementu id.

6

Hiya demohttp://jsfiddle.net/LYTbc/

jest to odniesienie do elementu DOM, więc można owinąć go bezpośrednio.

attr api: http://api.jquery.com/attr/

Sposób .attr() pobiera wartość atrybutu tylko do pierwszego elementu w zestawie dopasowane.

Miłego, okrzyki!

kod

$(document).ready(function() { 
    $(".inputs").click(function() { 
     alert(this.id); 

     alert(" or " + $(this).attr("id")); 

    }); 

});

1

to: Czy DOM Element $ (this): Jquery objct, które owinięte Domu Element, można sprawdzić tę odpowiedź również this vs $(this)

spróbuj jak ten Attr(). Uzyskaj wartość atrybutu dla pierwszego elementu w zestawie dopasowanych elementów.

$(document).ready(function() { 
    $(".inputs").click(function() { 
     alert(" or " + $(this).attr("id")); 

    }); 
}); 
87

$(this) i this nie są takie same. Pierwsza reprezentuje obiekt jQuery owinięty wokół twojego elementu. Drugi to tylko twój element. Właściwość id istnieje w elemencie, ale nie w obiekcie jQuery.Jako takie, masz kilka opcji:

  1. dostępu do właściwości na elemencie bezpośrednio:

    this.id

  2. do niego dostęp z obiektu jQuery:

    $(this).attr("id")

  3. Wyciągnij obiekt z jQuery:

    $(this).get(0).id; // Or $(this)[0].id

  4. Pobierz id od obiektu event:

    Kiedy zdarzenia są podniesione, na przykład zdarzenia click, prowadzą one ważne informacje i odniesienia się z nimi. W powyższym kodzie masz zdarzenie kliknięcia. Ten obiekt zdarzenia ma odniesienie do dwóch elementów: currentTarget i target.

    Używając target, można uzyskać id elementu, który podniósł zdarzenie. currentTarget po prostu powie Ci, który element jest obecnie przepuszczany. Nie zawsze są takie same.

    $("#button").on("click", function(e){ console.log(e.target.id) });

wszystkich tych, najlepszym rozwiązaniem jest po prostu do niego dostęp bezpośrednio z this się, chyba że jesteś zaangażowany w szereg zagnieżdżonych wydarzeń, to może być najlepiej użyć event obiekt każdego zdarzenia zagnieżdżonego (podaj wszystkie unikalne nazwy), aby odnieść elementy w wyższych lub niższych zakresach.

+6

Oczywiście jest wystarczająco popularne pytanie, że to był numer jeden wynik wyszukiwania, gdy googleed "$ (this) .id w jquery". Twoja odpowiedź była właściwa i pomogła mi. Poszedłem z metodą .attr() i działało jak urok. Dzięki! – hardba11

+3

Dlaczego ta odpowiedź nie jest prawidłowa? – Pier

+0

@Pier rzeczywiście jest to najlepsza odpowiedź, ale nie jedyna, która jest poprawna. – yeyo

2

zastosowanie tego actiion

$(document).ready(function() { 
var a = this.id; 

alert (a); 
});