Запретить изменение флажка при нажатии на него

Я хочу установить флажок на веб-странице. Когда я щелкаю по нему, он отправляет на сервер запрос ajax. Когда сервер отвечает, я хочу, чтобы флажок изменился. Могу исправить все, кроме того, что флажок сразу меняет состояние при нажатии.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
2 411
6

Ответы 6

Добавьте в свой onclick «return false;» и это не должно измениться.

В некоторых браузерах вы можете увидеть, как оно мерцает и гаснет. И если вы выполняете какое-либо другое действие синхронно до того, как вы вернете false, флажок будет оставаться установленным, пока ваш код не достигнет оператора return.

Adam Bellaire 10.10.2008 16:44

Вы уверены, что действительно этого хотите? Ajax-Request может занять свое время. Когда пользователь не получает обратной связи, он может щелкать снова и снова, пока что-то не произойдет. Когда это деактивирует кнопку (снова через некоторое время), пользователь становится еще более озадаченным.

Скорее подумайте о предоставлении немедленной обратной связи (например, установите флажок) и отобразите рядом с ним индикатор, который сигнализирует о связи с сервером (например, знаменитое вращающееся колесо). Когда результат вернется, скройте индикатор и при необходимости снимите флажок. Вы также можете запретить публикацию формы во время запроса ajax.

Вы можете начать свой метод onchange с checkbox.checked=NOT checkbox.checked (возможно, вам придется изменить его для выбранного вами языка), вы, вероятно, получите мерцание, но он должен вернуть его достаточно быстро.

Я всегда думал, что это checkbox.checked = false Я никогда раньше не видел = НЕ. Что ж, я думаю, если «НЕ» не определено, это может сработать.

Diodeus - James MacFarlane 10.10.2008 17:05

Я использую vbscript, все, что он делает, - это отменить настройку checkbox.checked, в любом случае. Кстати, с vbscript ужасно работать.

tloach 10.10.2008 17:33

Я думаю, вам действительно стоит использовать другой подход. Может быть, кнопка / изображение, потому что вы хотите запустить некоторые действия для щелчка, чтобы представить конкретную команду (желание) от пользователя. Я постараюсь объяснить лучше: я думаю, что у вас есть некоторая информация на странице и некоторые гаджеты, где пользователь может щелкнуть и что-то сделать (добавить товар в корзину), и я думаю, что это более удобно, если гаджет имеет больше визуальной привлекательности для пользователем, чем флажок (например, «добавить»).

Надеюсь на эту помощь.

Вероятно, вы могли бы сделать что-то вроде этого: когда флажок установлен, установите флажок в положение «отключено» (это выделяет флажок и делает его недоступным для редактирования), сделайте свой вызов ajax, и как только вы получите возврат ajax, удалите «отключено» из флажка. Что-то вроде этого (с использованием jQuery, непроверено):

$('#mycheckbox').click( function() {
  var checkbox = this;
  $(checkbox).attr('disabled','1');
  $.post( url, data, function() {
    // if successful
    $(checkbox).removeAttr('disabled');
  }
}

<input id = "theChkbox" type = "checkbox" onclick = "this.checked=!this.checked;sendAjaxRequest(this);">

this.checked=!this.checked сбросит состояние флажка до того, что было до его нажатия. Это должно работать во всех браузерах без мерцания состояния (слишком сильного).

sendAjaxRequest() сделает все возможное, и, когда запрос вернется, установите соответствующее состояние флажка. Передача this в sendAjaxRequest() должна дать вам ссылку на флажок, чтобы вы могли настроить его состояние. В противном случае просто используйте document.getElementById("theChkbox"), чтобы получить ссылку на него, чтобы установить его состояние.

Другие вопросы по теме