2013-07-09 36 views
13

Tôi muốn thiết lập sự kiện jQuery onClick đơn giản để làm cho giao diện người dùng động trên mẫu sổ tay lái. Tôi đã tự hỏi addClass() sau một nhấp chuột cụ thể.xử lý sự kiện jQuery onClick trên các thanh điều khiển

xem xét HTML (tạo ra bởi tay lái)

{{#if hasButton}} 
     <div id="container">  
      <button type="submit" class="myButton">Click me!</button> 
     </div> 
    {{/if}} 

tức là: Sau khi nhấp chuột bên trong một nút, thùng chứa của nó sẽ nhận được một lớp tải sẽ tạo ra sự tương tác sử dụng CSS.

$(".myButton").on("click", function(event){ 
     $(this).parent().addClass("loading"); 
}); 

Mã này nên đi trên mẫu tay lái của tôi hoặc tôi có nên viết lại nó vào trình trợ giúp cụ thể không? Có bất kỳ ví dụ nào có thể được cung cấp để tôi có thể nghiên cứu nó sau đó phát triển một cái gì đó tương tự?

Cảm ơn trước!

+0

Bạn nên tách 'html',' css' và 'js'. Nếu bạn tạo một cái gì đó từ một mẫu, bạn nên biết hành động nào sẽ diễn ra trong mẫu. (hoặc vì bạn gửi thông tin này với mẫu từ máy chủ) hoặc vì bạn đã biết trong mã của mình. Vì vậy, hãy đăng ký 'callbacks' cho sự kiện của bạn sau khi bạn thêm mẫu hoặc bạn sẽ sử dụng [delegate] (http://api.jquery.com/on/#direct-and-delegated-events) cho các sự kiện (ví dụ như: '$ (containerWhereYouAddThetemplateTo) .on (" click "," .myButton ", function() {})'; –

Trả lời

13

Bạn phải làm mới trình nghe Jquery của mình SAU việc chèn các nút vào HTML DOM của bạn.

var source = "<li><a href="{{uri}}">{{label}}</a></li>"; 
var template = Handlebars.compile(source); 
var context = {"uri":"http://example.com", "label":"my label"}; 
$("ul").append(template(context)); 

// add your JQuery event listeners 
$("li").click(function(){ alert("success"); }); 
0

Tôi không chắc chính xác vấn đề của bạn là gì. Chính xác như thế này nếu bạn giữ JavaScript trong tệp * .js, perhaps bằng cách sử dụng parent() thay vì prev() trong trường hợp cụ thể này.

+0

Vấn đề là sự kiện không được kích hoạt vì thêm jQuery đơn giản là không hoạt động (mã này thực sự đi trên mẫu handlebars không phải là js bên ngoài) (btw i thay đổi từ prev() thành parent() để có thể đọc mã tốt hơn) – Hal

38

không có cần thiết phải lắp lại xử lý sự kiện trên tất cả các bản cập nhật DOM động nếu bạn đang định nghĩa chúng ở cấp tài liệu:

$(document).on('click','li',function(){ 
    alert('success'); 
}); 

Hope this helps! :-)

+0

đây là cách nó được thực hiện trong một ứng dụng web hiện đại! – ProblemsOfSumit

+2

Word. Làm theo cách này Nhưng tôi thích thu hẹp càng nhiều càng tốt bằng cách thay thế 'tài liệu' cho nút có thể hiển thị gần nhất, như div bạn đã hiển thị mẫu thanh điều khiển. –

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