Lý do khiến trình xử lý nhấp của bạn không bao giờ kích hoạt vì nó không bao giờ được áp dụng cho phần tử của bạn. Vì vậy, khi bạn làm điều này trong jquery:
$('.some-class').on('some-event', someFunction);
Sau đó cho handler bị ràng buộc để sự kiện đó, đầu tiên jQuery có để tìm chọn $('.some-class')
của bạn. Trong trường hợp của bạn, rất có thể #btnParse
chưa được hiển thị cho trang bằng loại trực tiếp khi bạn ràng buộc sự kiện. Hoặc, cũng có thể, phần tử gốc đó được trả về, bị phá hủy và sau đó một phần tử khác được trả về. Trong kịch bản thứ hai này, trình xử lý sự kiện sẽ không còn trên nút.Một thay thế (mà tôi không khuyên bạn nên) là để ràng buộc xử lý cao hơn trong DOM, như ở cấp document
, và lọc các sự kiện để chỉ những cái gì đó với một id #btnParse
:
$(document).on('click', '#btnParse', function() { console.log('hi'); });
Lý do tôi không khuyên bạn nên thực hiện vì đó là thực hành loại trực tiếp xấu, bạn nên sử dụng ràng buộc click
như một số bài đăng khác được đề xuất. Ngoài ra, bạn đang sử dụng thuộc tính id và đó thực sự không phải là một ý tưởng hay nói chung về nội dung động được tạo khuôn mẫu - chỉ cần sử dụng các lớp trừ khi bạn hoàn toàn cần id cho phần tử tĩnh duy nhất.
Đối với cách sử dụng đúng cách ràng buộc nhấp chuột của loại trực tiếp, một điều khó khăn là bạn sẽ cần phải hiểu cách loại bỏ phạm vi. Nếu, ví dụ, bạn đang ràng buộc một nhấp chuột bên trong một vòng lặp, và bạn muốn xử lý từ mô hình giao diện chính, bạn phải tham khảo phạm vi phụ huynh vì vòng lặp thay đổi ngữ cảnh của bạn:
<!-- ko foreach: someCollection -->
<a data-bind="click: $parent.someFunction"></a>
<!-- /ko -->
Hơn nữa, nếu bạn cần thay đổi bối cảnh Javascript mà xử lý của bạn thực hiện với (các this
), sau đó bạn cần phải ràng buộc xử lý nhấp chuột như thế này:
<!-- ko foreach: someCollection -->
<a data-bind="click: $parent.someFunction.bind($parent)"></a>
<!-- /ko -->
Chơi với thứ mà một chút và đặt một câu hỏi mới nếu bạn vẫn còn bối rối. Chúc may mắn!
Tại sao không thêm chức năng nhấp qua liên kết bấm knockout? – Tyrsius
Có, tôi có thể, và thực sự nó hoạt động. Tuy nhiên, tôi cảm thấy rằng việc sử dụng liên kết dữ liệu phải được dành riêng cho một thứ thực sự liên quan đến mô hình xem. Nếu tôi muốn thao tác các yếu tố trên trang của tôi hơn nữa, tôi không nên dựa vào loại trực tiếp để làm như vậy. Tôi cũng khó chịu rằng một thiết lập đơn giản như thế này không hoạt động khi cần. –
Vâng, lưu ý bạn đang trỏ đến là dành cho các chức năng bấm dữ liệu, nó không nói về các nhấp chuột jquery. – Tyrsius