2012-01-29 25 views
5

Tôi đang sử dụng mã sau để cảnh báo id của phần tử hiện tại.ID cảnh báo của phần tử hiện tại

<input type="text" id="desc" name="txtTitle" onclick="fun()"> 

jquery:

function fun() { 
    var currentId = $(this).attr('id'); 
    alert(currentId); 
} 

Tại sao nó báo "không xác định"? Tôi đã thử với:

var currentId =$('element').attr('id'); 
// and 
alert($(this).id); 
// and 
alert(this.id); 

nhưng nó cảnh báo undefined

+1

Nếu bạn sử dụng jQuery để thêm trình xử lý onclick, bạn sẽ không hỏi điều này. :) – epascarello

Trả lời

4

Hãy thử thay đổi nó để:

<input type="text" id="desc" name="txtTitle" onclick="fun.call(this)"> 

tốt hơn, ràng buộc xử lý sự kiện của bạn với jQuery, kể từ khi bạn đang sử dụng nó anyway:

$(function() { $('#desc').click(fun); }); 

Lý do mã của bạn không hoạt động chiếc mũ bạn đang gọi fun() từ bên trong chức năng xử lý sự kiện được trình duyệt tạo cho thuộc tính "onclick" của bạn. Chỉ cần gọi hàm như thế, bạn không cung cấp đối tượng "người nhận" — không có gì cho this, tức là. Nếu bạn gọi nó là .call(), tuy nhiên bạn có thể làm điều đó một cách rõ ràng.

1

Nếu bạn chuyển một chuỗi đến sự kiện onclick, mã trong chuỗi đó sẽ là hàm được thực hiện. Nếu nó gọi một hàm khác, this sẽ không được xác định.

Hoặc làm

$("#desc").click(fun) 

trên tài liệu đã sẵn sàng, hoặc nếu bạn phải làm việc với các sự kiện nội tuyến, qua this như một cuộc tranh cãi sử dụng phương pháp thể hiện bởi chóp.

9

$(this) chỉ hoạt động bên trong các hàm jQuery; nó không tham chiếu gì bên trong fun(). Thay vào đó, hãy thử này:

$('input#desc').click(function() { 
    alert($(this).attr('id')); 
}); 

Với HTML này:

<input type="text" id="desc" name="txtTitle"> 

Đó không phải là thực hành đặc biệt tốt để có onClick="" thuộc tính trong HTML của bạn, vì thế mà $.click() chức năng đưa ra ở trên. Bạn nên luôn đặt JavaScript của mình vào một tệp riêng biệt (đặc biệt là khi sử dụng jQuery).

1

Thay đổi phần tử nói:

onclick="fun(this)" 

Và chức năng:

function fun(elem) 
{ 
    var currentId = $(elem).attr("id"); 
} 
0

Đó là bởi vì bạn gọi this trong phạm vi toàn cầu.

Without jQuery, bạn có thể làm như dưới đây:

<input type="text" id="desc" name="txtTitle" onclick="fun(this)"> 

function fun(el) { 
    alert(el.id); 
} 

Với jQuery, bạn có thể làm như dưới đây:

<input type="text" id="desc" name="txtTitle"> 

$(function(){ 
    $('input[type="text"]').click(function(){ 
     alert(this.id); 
    }); 
}); 
2

chỉ cần sử dụng

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

Bạn chỉ có thể sử dụng alert(event.target.id); bên trong hàm được gọi bởi phần tử của bạn mà không truyền bất kỳ đối số nào cho hàm.

Các vấn đề liên quan