Каков наилучший способ отключить кнопку, поэтому двойной щелчок не происходит с помощью knockout.js. У некоторых пользователей есть быстрый клик, вызывающий несколько запросов ajax. Я предполагаю, что knockout.js может справиться с этим несколькими способами и хочет увидеть некоторые из альтернатив.Предотвратите двойной щелчок на кнопке с knockout.js
ответ
Использование семафора (прямая блокировка). В основном вы считаете, сколько кликов зарегистрировал элемент, и если оно больше 1, вы возвращаете false и не разрешаете следующие клики. Функция тайм-аута может использоваться для очистки блокировки, чтобы они могли щелкнуть снова, скажем, 5 секунд. Вы можете изменить пример из http://knockoutjs.com/documentation/click-binding.html
Как видно здесь:
<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>
Изменяя логику внутри вложенной функции
if(this.numberOfClicks() > 1){
//TODO: Handle multiple clicks or simply return false
// and perhaps implement a timeout which clears the lockout
}
Я столкнулся с аналогичной проблемой с мастером формы, представившего данные через Ajax при нажатии кнопки. У нас есть 4 кнопки, избирательно видимые для каждого шага. Мы создали логическое наблюдаемое значение ButtonLock
и вернулись из функции отправки, если это правда. Тогда мы также данные объять disable
каждой кнопки на ButtonLock
наблюдаемого
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);
}
Кнопка:
<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);
}"/>
Если вам просто нужно, чтобы предотвратить несколько кликов, я предпочитаю булево , Но метод счетчика позволяет обнаруживать двойные щелчки и обрабатывать их отдельно, если вы хотите эту функцию.
Мне больше нравится этот ответ. Это дает пользователю некоторый визуальный индикатор того, что происходит против подхода подсчета. Пользователь может нажимать кнопку несколько раз и без индикатора, что происходит, чтобы они могли подумать, что что-то сломалось. – MorganTiley
Я согласен с @MorganTiley, это лучшее решение –
В случае, если кто-либо все еще ищет способ сделать это. Я обнаружил, что вы можете использовать логическое значение.
self.disableSubmitButton= ko.observable(false);
self.SubmitPayment = function() {
self.disableSubmitButton(true);
//your other actions here
}
Затем на ваш взгляд
data-bind="click:SubmitPayment, disable:disableSubmitButton"
Я сделал это с пользовательской привязки:
<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. Двойной щелчок на кнопке Android
- 2. Запретить двойной щелчок на кнопке MFC-Dialog
- 3. предотвратить двойной щелчок на кнопке в javascript
- 4. Как предотвратить двойной щелчок на кнопке «Сохранить»
- 5. Что делает двойной щелчок на домашней кнопке?
- 6. Как отключить двойной щелчок на кнопке winform?
- 7. Как предотвратить быстрый двойной щелчок на кнопке
- 8. Двойной щелчок по кнопке с транспортир
- 9. Как предотвратить двойной щелчок по кнопке обновления
- 10. Предотвратите двойной щелчок в кнопке отправки при возврате от других элементов управления, выполненных до нажатия кнопки
- 11. Предотвратите щелчок мышью
- 12. Запретить двойной щелчок на TButton
- 13. Двойной щелчок на JQuery
- 14. Двойной щелчок, также срабатывает двойной щелчок
- 15. второй щелчок на кнопке
- 16. Двойной щелчок с jquery?
- 17. Простой щелчок на ярлыках делает двойной щелчок
- 18. двойной щелчок кнопка используя slidetoggle()
- 19. переключиться на двойной щелчок, jquery
- 20. Щелчок на кнопке слишком мал
- 21. Как имитировать щелчок на кнопке?
- 22. Как обнаружить двойной щелчок на JSP
- 23. Предотвратите программный щелчок с помощью указателей-событий
- 24. Как отключить двойной щелчок по кнопке JQuery Modal Dialog?
- 25. Определить второй щелчок на кнопке
- 26. Модальный щелчок на кнопке требуется
- 27. Двойной щелчок Жест на UICollectionViewCell?
- 28. Двойной щелчок на диаграмме C3
- 29. кнопка гарнитуры двойной щелчок на андроид
- 30. Двойной щелчок в R-shiny
Великий ответ! Это также может быть реорганизовано в пользовательскую привязку кликов. – madcapnmckay
Идеальный ответ. Я пошел вперед и завернул все мои звонки в этом без проблем и, как правило, сбрасывал клики после каждого вызова ajax. Интересно, как выглядит пользовательское связывание. –