Tôi có các widget có các điều khiển javascript kèm theo chúng.
Nếu tiện ích có mặt khi trang quản trị tiện ích tải, các điều khiển hoạt động chính xác.
Khi tôi thêm một tiện ích mới, chúng không hoạt động chính xác, tôi nhận được đánh dấu, nhưng không có sự kiện javascript nào có hiệu lực.
Nếu tôi lưu tiện ích mới, khi biểu mẫu tải lại, các điều khiển được tạo chính xác và bây giờ hoạt động.
Làm mới trang cũng khắc phục sự cố, nhưng chỉ đối với các tiện ích hiện có. Các vật dụng mới vẫn có vấn đề này.
Cụ thể tôi đang chạy selectize trên các đầu vào được chọn tại các điểm sau:
- tài liệu đã sẵn sàng
- Hoàn thành
Tôi đã xác minh rằng mã của tôi được chạy trên mỗi sự kiện như mong muốn, nhưng kết quả không như mong đợi.
Đây là một plugin thử nghiệm chứng minh vấn đề:
https://gist.github.com/Tarendai/8466299
Bạn sẽ thấy tôi có một bộ đếm tăng với mọi yếu tố được chọn mà nó thấy rằng nó có thể chuyển đổi.
Ghi chú:
- Khi trang tiện ích tải, tôi có thể thấy bộ đếm tăng lên trong bảng điều khiển JS như mong đợi
- Tuy nhiên, khi tôi thêm một tiện ích mới, mã sẽ được chạy, nó không tìm thấy bất kỳ phần tử chọn nào mà nó có thể chạy, như được chứng minh bởi Found.length là 0. Điều này không nên xảy ra, vì mọi widget mới thuộc loại đó nên có một yếu tố chọn
- các phần tử chọn có một lớp để xác định chúng, lớp này được loại bỏ sau khi thư viện chọn được áp dụng để ngăn ngừa trùng lặp và xử lý lại trên các widget hiện có.
- Trước khi sử dụng selectize, tôi đã sử dụng Select2, vấn đề tương tự
- Nhận xét mã AJAX, tôi mong muốn các widget mới có đầu vào chọn chuẩn. Họ không. Tôi không biết tại sao lại như vậy
Vậy làm cách nào để làm cho điều khiển chọn lọc hoạt động mà không yêu cầu người dùng làm mới / nhấp lưu trước khi thực hiện thay đổi?
jQuery( document ).ajaxStop( function() {
phần này để tôi có thể khởi tạo các điều khiển trong các tiện ích mới được tải. Tuy nhiên, nếu tôi xóa dòng đó, tôi sẽ mong các widget mới có các đầu vào chọn HTML tiêu chuẩn, nhưng chúng không = s
widget-updated
và widget-added
các sự kiện. Ngoài ra tôi muốn nhấn mạnh, trong mã @michaeljames, việc sử dụng id phần tử #widgets-right
. Hãy chắc chắn sử dụng nó để nhắm mục tiêu các phần tử widget đang hoạt động bên trong mã JS của bạn nếu không bạn có thể nhận được các phần tử trùng lặp vì mã của bạn cũng có thể chọn các thành phần widget không hoạt động ẩn ở phía bên trái màn hình (và các phần tử được sao chép khi thêm widget).
.on()
phương thức jQuery . Mà yêu cầu bạn liên kết một sự kiện với tài liệu. Tuy nhiên sự kiện nào sẽ phù hợp Tôi không chắc chắn ngay bây giờ. Cuối cùng, đó là vì các ràng buộc ban đầu của bạn đại diện cho phiên bản ban đầu của DOM khi trang được tải và phần lớn bị mù với các phần tử mới (nội dung widget) đang được thêm thông qua ajax. Hy vọng rằng điều đó sẽ chỉ cho bạn đi đúng hướng, nếu không tôi có thể trả lời tốt hơn khi tôi đang làm việc.