Как установить POST/Отправить флажок ввода, который отключен?

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

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

Ответ 1

UPDATE: READONLY не работает с флажками

Вы можете использовать disabled="disabled", но в этот момент значение флажка не будет отображаться в значениях POST. Одна из стратегий заключается в добавлении значения флажка скрытого поля, хранящегося в той же форме, и чтения значения из этого поля

Просто измените disabled на READONLY

Ответ 2

Я решил эту проблему.

Так как тег readonly="readonly" не работает (я пробовал разные браузеры), вы должны использовать disabled="disabled" вместо. Но ваше значение флажка не будет опубликовано...

Вот мое решение:

Чтобы получить "readonly" и POST значение флажка в одно и то же время, просто добавьте скрытый "enter" с тем же именем и значением, что и ваш флажок. Вы должны держать его рядом с вашим флажком или между тегами <form></form>:

<input type="checkbox" checked="checked" disabled="disabled" name="Tests" value="4">SOME TEXT</input>

<input type="hidden" id="Tests" name="Tests" value="4" />

Кроме того, просто чтобы я знал, что readonly="readonly", readonly="true", readonly="", или просто READONLY НЕ РЕШЕТ! Я потратил несколько часов, чтобы понять это!

Эта ссылка также НЕ актуальна (может быть, еще нет, или нет, я не знаю): http://www.w3schools.com/tags/att_input_readonly.asp

Ответ 3

Если вы счастливы с помощью JQuery, тогда удалите атрибут disabled при отправке формы:

$("form").submit(function() {
    $("input").removeAttr("disabled");
});

Ответ 4

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

<input type="checkbox" name="myCheckbox" value="agree" />
<input type="hidden" name="myCheckbox" value="false" />

Если флажок установлен на флажке при отправке формы, значение этого параметра формы будет

"agree,false"

Если флажок не установлен, значение будет

"false"

Вы можете использовать любое значение вместо "false", но вы получите эту идею.

Ответ 5

<input type="checkbox" checked="checked" onclick="this.checked=true" />

Я начал с проблемы: "Как установить POST/Отправить флажок ввода, который отключен?" и в своем ответе я пропустил комментарий: "Если мы хотим отключить флажок, нам обязательно нужно сохранить префиксное значение (отмечено или не отмечено), а также мы хотим, чтобы пользователь знал об этом (в противном случае мы должны использовать скрытый тип и а не флажок)". В моем ответе я предположил, что мы хотим, чтобы всегда проверялся флажок, и этот код работает таким образом. Если мы нажмем на этот ckeckbox, он будет проверяться вечно, и его значение будет POSTED/Submitted! Точно так же, если я пишу   onclick = "this.checked = false" без checked = "checked" (примечание: default unchecked) он будет навсегда снят, и его значение не будет POSTED/Submitted!.

Ответ 6

Самый простой способ:

<input type="checkbox" class="special" onclick="event.preventDefault();" checked />

Это не позволит пользователю отменить выбор этого флажка, и он все равно отправит свое значение при отправке формы. Удалить флажок, если вы хотите, чтобы пользователь не мог установить этот флажок.

Кроме того, вы можете использовать javascript для очистки onclick, как только определенное условие будет выполнено (если это вам нужно). Здесь внизу-грязная скрипка, показывающая, что я имею в виду. Это не идеально, но вы получаете суть.

http://jsfiddle.net/vwUUc/

Ответ 7

Это работает как прелесть:

  • Удалить атрибуты "отключено"
  • Отправить форму
  • Добавить атрибуты снова. Лучший способ сделать это - использовать функцию setTimeOut, например. с задержкой в ​​1 миллисекунду.

Единственным недостатком является короткое мигание отключенных полей ввода при отправке. По крайней мере, в моем сценарии это не проблема!

$('form').bind('submit', function () {
  var $inputs = $(this).find(':input'),
      disabledInputs = [],
      $curInput;

  // remove attributes
  for (var i = 0; i < $inputs.length; i++) {
    $curInput = $($inputs[i]);

    if ($curInput.attr('disabled') !== undefined) {
      $curInput.removeAttr('disabled');
      disabledInputs.push(true);
    } else 
      disabledInputs.push(false);
  }

  // add attributes
  setTimeout(function() {
    for (var i = 0; i < $inputs.length; i++) {

      if (disabledInputs[i] === true)
        $($inputs[i]).attr('disabled', true);

    }
  }, 1);

});

Ответ 8

Не отключайте его; вместо этого задайте его только для чтения, хотя это не влияет на то, что не позволяет пользователю изменять состояние. Но вы можете использовать jQuery для обеспечения этого (запретите пользователю изменять состояние флажка:

$('input[type="checkbox"][readonly="readonly"]').click(function(e){
    e.preventDefault();
});

Это предполагает, что все флажки, которые вы не хотите изменять, имеют атрибут "readonly". например.

<input type="checkbox" readonly="readonly">

Ответ 9

С

  • установка атрибута readonly для флажка недействительна в соответствии со спецификацией HTML,
  • использование скрытого элемента для отправки значения не очень красиво и
  • установка onclick JavaScript, которая предотвращает изменение значения, тоже не очень приятна.

Я собираюсь предложить вам еще одну возможность:

Установите флажок как отключенный, как обычно. И до того, как форма будет отправлена ​​пользователем, установите этот флажок с помощью JavaScript.

<script>
    function beforeSumbit() {
        var checkbox = document.getElementById('disabledCheckbox');
        checkbox.disabled = false;
    }
</script>
...
<form action="myAction.do" method="post" onSubmit="javascript: beforeSubmit();">
    <checkbox name="checkboxName" value="checkboxValue" disabled="disabled" id="disabledCheckbox" />
    <input type="submit />
</form>

Поскольку флажок включен до отправки формы, его значение публикуется обычным способом. Единственное, что не очень приятно в этом решении, заключается в том, что этот флажок становится включенным некоторое время, и это видно пользователям. Но это просто деталь, с которой я могу жить.

Ответ 10

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

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

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

  • 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();'>

Ответ 11

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

Ответ 12

<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 является примером предыдущего предложения для управления вторым флажком, который проверяется (публикует его значение) или не отмечен (не публикует его значение) в соответствии с предложением, и пользователь не может изменять свой статус; нет необходимости управлять отключением второго флажка

Ответ 13

Нет другого параметра, кроме поля 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

Ответ 14

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

$('#myForm').submit(function() {
    $('checkbox').removeAttr('disabled');
});