2012-05-14 37 views
22

Tôi có hai nút radio asp trên một trang được đặt trong một updatepanel. Tôi đã viết một sự kiện nhấp chuột cho họ với jQuery như sau:

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

Nhưng nó trả về Chưa xác định. Vấn đề là gì?

EDIT: 

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

Hai dòng này trả về null!

+1

Luôn luôn sử dụng console.log(); Nó sẽ dễ dàng hơn nhiều. Trong ví dụ của bạn, bạn có thể sử dụng: console.log (this); Và nó hiển thị tất cả dữ liệu (id, className, vv ..) – Min2liz

Trả lời

25

Một tùy chọn khác (chỉ để bạn đã nhìn thấy nó):

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

HTH.

4

$(this) là đối tượng jQuery bao quanh phần tử DOM this và đối tượng jQuery không có thuộc tính id. Có thể bạn chỉ muốn this.id để nhận thuộc tính id của phần tử được nhấp.

6

Hiya bản demohttp://jsfiddle.net/LYTbc/

đây là một tham chiếu đến phần tử DOM, vì vậy bạn có thể bọc nó trực tiếp.

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

Phương pháp .attr() được các giá trị thuộc tính cho chỉ phần tử đầu tiên trong tập hợp.

chúc bạn vui vẻ!

đang

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

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

    }); 

});

1

này: là phần tử DOM $ (this): Jquery objct, mà được bao bọc bởi Dom Element, bạn có thể kiểm tra câu trả lời này cũng this vs $(this)

thử như thế này Attr(). Lấy giá trị của một thuộc tính cho phần tử đầu tiên trong tập hợp các phần tử đã so khớp.

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

    }); 
}); 
87

$(this)this không giống nhau. Việc đầu tiên đại diện cho một đối tượng jQuery quấn quanh phần tử của bạn. Thứ hai chỉ là yếu tố của bạn. Thuộc tính id tồn tại trên phần tử, nhưng không tồn tại đối tượng jQuery.Như vậy, bạn có một vài lựa chọn:

  1. Truy cập tài sản trên phần tử trực tiếp:

    this.id

  2. truy cập nó từ đối tượng jQuery:

    $(this).attr("id")

  3. Kéo đối tượng ra khỏi jQuery:

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

  4. Lấy id từ đối tượng event:

    Khi sự kiện được nâng lên, ví dụ như một sự kiện nhấp chuột, họ mang thông tin quan trọng và tài liệu tham khảo xung quanh với họ. Trong mã của bạn ở trên, bạn có một sự kiện nhấp chuột. Đối tượng sự kiện này có tham chiếu đến hai mục: currentTargettarget.

    Sử dụng target, bạn có thể nhận được id của phần tử đã nêu sự kiện. currentTarget sẽ chỉ cho bạn biết yếu tố nào mà sự kiện hiện đang diễn ra. Đây không phải lúc nào cũng giống nhau.

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

Trong tất cả trong số này, lựa chọn tốt nhất là chỉ cần truy cập vào nó trực tiếp từ this chính nó, trừ khi bạn đang tham gia vào một loạt các sự kiện lồng nhau, sau đó nó có thể là tốt nhất để sử dụng event đối tượng của mỗi sự kiện lồng nhau (cung cấp cho họ tất cả các tên duy nhất) để tham chiếu các phần tử trong phạm vi cao hơn hoặc thấp hơn.

+6

Rõ ràng là một câu hỏi đủ phổ biến rằng đây là kết quả tìm kiếm số một khi tôi googled "$ (this) .id trong jquery". Và câu trả lời của bạn đã đúng và giúp tôi. Tôi đã đi với phương thức .attr() và nó hoạt động như một sự quyến rũ. Cảm ơn! – hardba11

+3

Tại sao đây không phải là câu trả lời đúng? – Pier

+0

@Pier thực sự đây là câu trả lời hay nhất, nhưng không phải là câu trả lời duy nhất đúng. – yeyo

2

sử dụng actiion này

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

alert (a); 
}); 
Các vấn đề liên quan