2010-08-25 44 views
18

Cài đặt rất dễ dàng; Tôi muốn có thể thêm một lớp vào (trong trường hợp này) một nút khi sự kiện onClick được kích hoạt. Vấn đề của tôi là tôi đã không tìm thấy một cách để vượt qua các nút chính nó như là tham số cho chức năng. Tôi muốn làm điều gì đó như:jQuery addClass onClick

<asp:Button ID="Button" runat="server" onclick="addClassByClick(this)"/> 

Và sau đó một hàm JavaScript một cái gì đó như thế này:

function addClassByClick(button){ 
    button.addClass("active") 
} 

Tôi biết tôi đã có rất nhiều sai sót ở đây, nhưng đó là lý do tại sao tôi đăng. Tôi đã thử các kịch bản khác nhau với jQuery và không có jQuery nhưng tôi luôn kết thúc với một giải pháp bị hỏng (các lần nhấp đột ngột dừng lại, lớp không được thêm vào v.v.) vì vậy tôi quyết định hỏi chuyên gia.

Bất kỳ đề xuất nào về những gì tôi có thể thử? Cảm ơn bạn đã đọc chỉnh sửa và tất cả trợ giúp!

+0

Như nhiều người đã chỉ ra, ID được hiển thị của nút của bạn sẽ không là "Nút". Tuy nhiên, bạn vẫn có thể tham chiếu nó bằng ID thay vì lớp (bộ chọn jquery hoạt động tốt hơn trên ID so với lớp), bằng cách thực hiện: $ ("# <% = Button.ClientID%>") – mikemanne

Trả lời

36

Nó cần phải là một yếu tố jQuery để sử dụng .addClass(), vì vậy nó cần phải được bọc trong $() như thế này:

function addClassByClick(button){ 
    $(button).addClass("active") 
} 

Một giải pháp tổng thể tốt hơn sẽ là kịch bản không phô trương, ví dụ:

<asp:Button ID="Button" runat="server" class="clickable"/> 

Sau đó, trong jquery:

$(function() {      //run when the DOM is ready 
    $(".clickable").click(function() { //use a class, since your ID gets mangled 
    $(this).addClass("active");  //add the class to the clicked element 
    }); 
}); 
+0

trong ví dụ đầu tiên của bạn Tôi thực sự có thể sử dụng "này" để vượt qua các nút như một đối số cho chức năng? Tôi sẽ không cần phải làm một số đúc hoặc là tất cả những gì xử lý? – Phil

+0

@Phil - Có, bạn có thể vượt qua 'this' trong ví dụ đầu tiên, đó là một phần tử DOM, đó là tất cả những gì cần thiết :) Tôi khuyên bạn nên sử dụng một tùy chọn kín đáo ở đây như phần thứ hai của câu trả lời, dễ dàng hơn nhiều duy trì. –

+0

@Nick - Tôi chắc chắn sẽ thử, nhưng tôi thực sự không thoải mái với cú pháp jQuery được nêu ra .. Tôi thực sự nên đọc lên trên nó. Giống như trong ví dụ của bạn; nếu các lớp của nút là: CssClass = "nút nằm ngang" thì tôi sẽ nhắm mục tiêu như thế nào? – Phil

8

Sử dụng jQuery:

$('#Button').click(function(){ 
    $(this).addClass("active"); 
}); 

Bằng cách này, bạn không cần phải làm ô nhiễm đánh dấu HTML của bạn với onclick xử lý.

+0

Vấn đề với cách tiếp cận này là ID phần tử isn ' t được bảo đảm là 'Nút', thường thì không. –

+0

Vâng, bạn chỉ có thể làm việc với những gì câu hỏi cung cấp cho bạn. Tôi chắc chắn Phil là đủ sáng để tìm kiếm các tài liệu chọn jQuery và tìm cho mình một bộ chọn tốt đẹp apt cho công việc. –

+0

Tôi sẽ không chắc chắn;) – Phil

0
$('#button').click(function(){ 
    $(this).addClass('active'); 
}); 
2
$(document).ready(function() { 
    $('#Button').click(function() { 
     $(this).addClass('active'); 
    }); 
}); 

nên làm các trick. trừ khi bạn đang tải nút bằng ajax. Trong trường hợp đó bạn có thể làm:

$('#Button').live('click', function() {... 

Cũng nhớ không sử dụng cùng một id nhiều hơn một lần trong mã html của bạn.

0

Cố gắng làm cho css của bạn cụ thể hơn để kiểu (màu xanh lá cây) mới cụ thể hơn kiểu trước đó, vì vậy nó làm việc cho tôi!

Ví dụ, bạn có thể sử dụng trong css:

button:active {/*your style here*/} 

Thay vì (có lẽ không làm việc):

.active {/*style*/} (.active is not a pseudo-class) 

Hy vọng nó sẽ giúp!

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