Cách tốt nhất để vô hiệu hóa nút để nhấp đúp không xảy ra với knockout.js là gì. Tôi có một số người dùng thực hiện một số thao tác nhấp nhanh gây ra nhiều yêu cầu ajax. Tôi cho rằng knockout.js có thể xử lý điều này theo nhiều cách và muốn xem một số giải pháp thay thế.Ngăn chặn nhấp đúp vào nút có knockout.js
Trả lời
Sử dụng semaphore (khóa kéo sợi). Về cơ bản, bạn tính số lượng nhấp chuột mà một phần tử đã đăng ký và nếu nhiều hơn 1 bạn trả về false và không cho phép các nhấp chuột sau đây. Bạn có thể sử dụng chức năng hết thời gian chờ để xóa khóa để có thể nhấp lại sau khi nói, 5 giây. Bạn có thể sửa đổi các ví dụ từ http://knockoutjs.com/documentation/click-binding.html
Như đã thấy ở đây:
<div>
You've clicked <span data-bind="text: numberOfClicks"></span> times
<button data-bind="click: incrementClickCounter">Click me</button>
</div>
<script type="text/javascript">
var viewModel = {
numberOfClicks : ko.observable(0),
incrementClickCounter : function() {
var previousCount = this.numberOfClicks();
this.numberOfClicks(previousCount + 1);
}
};
</script>
Bằng cách thay đổi logic bên trong hàm lồng nhau để
if(this.numberOfClicks() > 1){
//TODO: Handle multiple clicks or simply return false
// and perhaps implement a timeout which clears the lockout
}
Tôi chạy vào một vấn đề tương tự với một dữ liệu dạng thuật sĩ trình qua Ajax khi nhấp vào nút. Chúng tôi có 4 nút có thể nhìn thấy có chọn lọc cho mỗi bước. Chúng tôi đã tạo ra một boolean có thể quan sát được ButtonLock
và được trả về từ chức năng gửi nếu nó đúng. Sau đó, chúng tôi cũng dữ liệu ràng buộc các disable
của mỗi nút đến ButtonLock
thể quan sát được
ViewModel:
var viewModel = function(...) {
self.ButtonLock = ko.observable(false);
self.AdvanceStep = function (action) {
self.ButtonLock(true);
// Do stuff
// Ajax call
}
self.AjaxCallback = function(data) {
// Handle response, update UI
self.ButtonLock(false);
}
Button:
<input type="button" id="FormContinue" name="FormContinue" class="ActionButton ContinueButton"
data-bind="
if: CurrentStep().actions.continueAction,
disable: ButtonLock,
value: CurrentStep().actions.continueAction.buttonText,
click: function() {
AdvanceStep(CurrentStep().actions.continueAction);
}"/>
Nếu bạn chỉ cần để ngăn chặn nhiều lần nhấp chuột, tôi thích boolean . Nhưng phương pháp truy cập cho phép bạn phát hiện các nhấp chuột đôi và xử lý chúng một cách riêng biệt, nếu bạn muốn tính năng đó.
Tôi thích câu trả lời này nhiều hơn. Nó cung cấp cho người dùng một số chỉ báo trực quan về những gì đang xảy ra so với cách tiếp cận đếm. Người dùng có thể nhấp vào nút nhiều lần và không có chỉ báo những gì đang xảy ra để họ có thể nghĩ rằng điều gì đó đã xảy ra. – MorganTiley
Tôi đồng ý với @MorganTiley, đây là giải pháp tốt hơn –
Trong trường hợp bất kỳ ai vẫn đang tìm cách để thực hiện việc này. Tôi thấy rằng bạn có thể sử dụng boolean.
self.disableSubmitButton= ko.observable(false);
self.SubmitPayment = function() {
self.disableSubmitButton(true);
//your other actions here
}
Sau đó, theo quan điểm của bạn
data-bind="click:SubmitPayment, disable:disableSubmitButton"
Tôi đã làm điều này với ràng buộc một tùy chỉnh:
<button data-bind="throttleClick: function() { console.log(new Date()); }>
I wont double click quicker than 800ms
</button>
ko.bindingHandlers.throttleClick = {
init: function(element, valueAccessor) {
var preventClick = false;
var handler = ko.unwrap(valueAccessor());
$(element).click(function() {
if(preventClick)
return;
preventClick = true;
handler.call();
setTimeout(function() { preventClick = false; }, 800);
})
}
}
- 1. Ngăn ngừa tình cờ nhấp đúp vào một nút
- 2. ghi đè JTree nhấp đúp để ngăn mở rộng nút?
- 3. Ngăn việc chọn văn bản sau khi nhấp đúp vào
- 4. ASP.NET Web Forms có ngăn chặn một lần nhấp đúp không?
- 5. Ngăn chặn popToRootViewController tự động khi nhấn đúp vào UITabBarController
- 6. Javafx 2 nhấp và nhấp đúp vào
- 7. mục DataGridView nhấp đúp vào
- 8. Nhấp đúp vào hàng DataGridView?
- 9. ASP.Net nhấp đúp vào vấn đề
- 10. Ngăn chặn lỗi nhấp đúp với hộp kiểm + kết hợp nhãn
- 11. làm thế nào để ngăn chặn sự kiện nhấp đúp trong một datagridview được nâng lên?
- 12. Làm thế nào để ngăn chặn sự kích đúp vào chọn văn bản trong javascript
- 13. javascript/jquery vô hiệu hóa nút gửi trên nhấp chuột, ngăn chặn đôi nộp
- 14. Bắt nhấp đúp vào Cocoa OSX
- 15. NSImageView nhấp đúp vào hành động
- 16. Nhấp đúp vào Làm Nổi bật
- 17. Nhấp đúp vào vs java -jar MyJar.jar
- 18. remap NERDTree Nhấp đúp vào 'T'
- 19. jQuery .load() Cách ngăn tải hai lần từ việc nhấp đúp vào
- 20. Ngăn chặn nút quay lại
- 21. Hoạt động nhấp đúp vào TreeView trong .NET/C#
- 22. Cách lấy TreeTableNode nhấp đúp?
- 23. javascript cho phép nhập vào nhấp đúp vào
- 24. Những người nhấp đúp vào tất cả mọi thứ trên các trang web ... jQuery nhấp đúp vào problemo
- 25. Xử lý nút chuột phải Nhấp đúp chuột vào hình dạng
- 26. javascript có thể mô phỏng nhấp chuột vào nút không?
- 27. Nhấp vào hủy trên Javascript Xác nhận hộp không ngăn chặn lưới làm mới
- 28. Mục UITabbar trên iPhone nhấp đúp vào trình điều khiển bật lên
- 29. Ngăn hoạt ảnh khi nhấp vào nút "Quay lại" trong thanh điều hướng?
- 30. Danh sách nút radio với Knockout.js
Great câu trả lời! Điều này cũng có thể được tái cấu trúc thành một liên kết nhấp chuột tùy chỉnh. – madcapnmckay
Câu trả lời hoàn hảo. Tôi đã đi trước và gói tất cả các cuộc gọi của tôi trong đó mà không có vấn đề, và thiết lập lại các nhấp chuột sau mỗi cuộc gọi ajax, nói chung tất nhiên. Tôi tự hỏi làm thế nào một ràng buộc tùy chỉnh có thể giống như thế. –