Как POST / Отправить флажок ввода, который отключен? - PullRequest
122 голосов
/ 18 января 2011

У меня есть флажок, который при определенных условиях должен быть отключен.Оказывается, HTTP не публикует отключенные данные.

Как мне обойти это?отправка ввода, даже если он отключен, и сохранение входа отключенным?

Ответы [ 16 ]

1 голос
/ 07 ноября 2016

Добавьте onsubmit="this['*nameofyourcheckbox*'].disabled=false" к форме.

1 голос
/ 01 июня 2014

К сожалению, не существует «простого» решения. Атрибут только для чтения не может быть применен к флажкам. Я прочитал спецификации W3 о флажке и нашел виновника:

Если элемент управления не имеет текущего значения при отправке формы, пользовательские агенты не обязаны рассматривать его как успешный элемент управления. (http://www.w3.org/TR/html401/interact/forms.html#h-17.13.2)

Это приводит к тому, что непроверенное состояние и отключенное состояние приводят к одному и тому же проанализированному значению.

  • readonly = "readonly" не является допустимым атрибутом для флажков.
  • OnClick = "event.preventDefault ();" не всегда хорошее решение, поскольку оно срабатывает на самом флажке. Но в некоторых случаях это может сработать чарами.
  • Включение флажка onSubmit не является решением, поскольку элемент управления по-прежнему не рассматривается как успешный элемент управления, поэтому значение не будет проанализировано.
  • Добавление другого скрытого ввода с тем же именем в HTML не работает, поскольку первое значение элемента управления перезаписывается вторым значением элемента управления, поскольку оно имеет то же имя.

Единственный полный способ сделать это - добавить скрытый ввод с тем же именем с помощью javascript при отправке формы .

Вы можете использовать небольшой фрагмент, который я сделал для этого:

function disabled_checkbox() {
  var theform = document.forms[0];
  var theinputs = theform.getElementsByTagName('input');
  var nrofinputs = theinputs.length;
  for(var inputnr=0;inputnr<nrofinputs;inputnr++) {
    if(theinputs[inputnr].disabled==true) {
      var thevalueis = theinputs[inputnr].checked==true?"on":"";
      var thehiddeninput = document.createElement("input");
      thehiddeninput.setAttribute("type","hidden");
      thehiddeninput.setAttribute("name",theinputs[inputnr].name);
      thehiddeninput.setAttribute("value",thevalueis);
      theinputs[inputnr].parentNode.appendChild(thehiddeninput);
    }
  }
}

Это ищет первую форму в документе, собирает все входные данные и ищет отключенные входные данные. Когда обнаружен отключенный вход, в parentNode создается скрытый вход с тем же именем и значением «on» (если его состояние «проверено») и «» (если это состояние «- не проверено»).

Эта функция должна вызываться событием 'onsubmit' в элементе FORM как:

<form id='ID' action='ACTION' onsubmit='disabled_checkbox();'>
0 голосов
/ 28 августа 2018

Добавление onclick="this.checked=true" Решите мою проблему:
Пример:

<input type="checkbox" id="scales" name="feature[]" value="scales" checked="checked" onclick="this.checked=true" />
0 голосов
/ 05 октября 2017

Вы можете оставить его отключенным по желанию, а затем удалить атрибут disabled перед отправкой формы.

$('#myForm').submit(function() {
    $('checkbox').removeAttr('disabled');
});
0 голосов
/ 04 января 2016

Нет другого параметра, кроме поля hidden, поэтому попробуйте использовать поле hidden, как показано в коде ниже:

<input type="hidden" type="text" name="chk1[]" id="tasks" value="xyz" >
<input class="display_checkbox" type="checkbox" name="chk1[]" id="tasks" value="xyz" checked="check"  disabled="disabled" >Tasks
0 голосов
/ 11 октября 2012
<html>
    <head>
    <script type="text/javascript">
    function some_name() {if (document.getElementById('first').checked)      document.getElementById('second').checked=false; else document.getElementById('second').checked=true;} 
    </script>
    </head>
    <body onload="some_name();">
    <form>
    <input type="checkbox" id="first" value="first" onclick="some_name();"/>first<br/>
    <input type="checkbox" id="second" value="second" onclick="some_name();" />second
    </form>
    </body>
</html>

Функция some_name является примером предыдущего предложения для управления вторым флажком, который отмечен (публикует свое значение) или не отмечен (не публикует свое значение) в соответствии с предложением, и пользователь не может изменять свой статус;нет необходимости управлять отключением второго флажка

...