Мне нужен флажок на веб-странице. Когда я нажимаю на нее, он отправляет запрос ajax на сервер. Когда сервер отвечает, я хочу, чтобы флажок изменился. Я могу исправить все, кроме того факта, что чекбокс сразу меняет состояние при нажатии.
Запретить изменение флажка при нажатии на него
Ответы (6)
Ты уверен, что действительно этого хочешь? Ajax-запрос может занять некоторое время. Когда пользователь не получает обратной связи, он может щелкать снова и снова, пока что-то не произойдет. Когда это деактивирует кнопку (снова через некоторое время), пользователь становится еще более озадаченным.
Скорее подумайте о предоставлении немедленной обратной связи (например, установите флажок) и отобразите рядом с ним индикатор, который сигнализирует о связи с сервером (например, знаменитая прялка). Когда результат вернется, скройте индикатор и при необходимости снимите флажок. Вы также можете запретить публикацию формы во время запроса ajax.
Вероятно, вы могли бы сделать что-то вроде этого: когда флажок установлен, установите флажок «отключено» (это делает флажок серым и делает его недоступным для редактирования), сделайте вызов ajax, и как только вы получите возврат ajax, удалите «отключено» из флажка. Что-то вроде этого (с использованием jQuery, непроверено):
$('#mycheckbox').click( function() {
var checkbox = this;
$(checkbox).attr('disabled','1');
$.post( url, data, function() {
// if successful
$(checkbox).removeAttr('disabled');
}
}
Добавьте в свой onclick «return false;» и не должно меняться.
<input id="theChkbox" type="checkbox" onclick="this.checked=!this.checked;sendAjaxRequest(this);">
this.checked=!this.checked
сбросит состояние флажка до того, что было до того, как он был нажат. Это должно работать во всех браузерах без мерцания состояния (слишком сильно).
sendAjaxRequest()
сотворит вашу магию, и когда запрос вернется, установите соответствующее проверенное состояние флажка. Передача this
в sendAjaxRequest()
должна дать вам ссылку на флажок, чтобы вы могли настроить его состояние. В противном случае просто используйте document.getElementById("theChkbox")
, чтобы получить ссылку на него, чтобы установить его состояние.
Вы можете начать свой метод onchange с checkbox.checked=NOT checkbox.checked
(возможно, вам придется изменить его для выбранного вами языка), вы, вероятно, получите мерцание, но оно должно вернуться достаточно быстро.
Я думаю, вам действительно следует использовать другой подход. Может быть, кнопка/кнопка с изображением, потому что вы хотите запустить некоторые действия для щелчка, чтобы представить конкретную команду (желание) от пользователя. Я попытаюсь объяснить лучше: я думаю, что у вас есть некоторая информация на странице и некоторые гаджеты, где пользователь может щелкнуть и что-то сделать (добавить товар в корзину), и я думаю, что это более удобно, если гаджет имеет более визуальную привлекательность. пользователя, чем флажок (например, «добавить»).
Надеюсь, это поможет.