Пример:

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

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

 Sergej Fomin05 окт. 2017 г., 14:49
Я думаю, что это решение также помогает здесь:stackoverflow.com/questions/12769664/...
 Sergej Fomin05 окт. 2017 г., 14:49
Я думаю, что это решение также помогает здесь:stackoverflow.com/questions/12769664/...

Ответы на вопрос(16)

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

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

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

"agree,false"

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

"false"

Вы могли бы использовать любое значение вместо «ложь», но вы поняли идею.

 jessegavin18 янв. 2011 г., 20:20
Разве вы просто не ненавидите, когда пишете какое-то сложное решение проблемы, а затем, когда вы обновляетесь, кто-то (например, Франческо) идет и пишет простой однострочный текст? ;)
 RyanfaeScotland27 нояб. 2017 г., 18:29
@jessegavin Учитывая, что его «простой вкладыш» больше не работает, и он обновил свой ответ, включив в него ваш ответ, нет, я не могу сказать, что так и есть.
 Geoffrey14 мар. 2012 г., 09:52
Это идеально подходит для того, что я пытаюсь выполнить, я хочу, чтобы флажок без флажка отправлял значение, а не ничего, спасибо: D.

не существует «простого» решения. Атрибут только для чтения не может быть применен к флажкам. Я прочитал спецификацию 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();'>

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

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

Получить"ReadOnly" посмотри иПОЧТА значение флажка в то же время,просто добавьте скрытый «вход» с тем же именем и значением, что и ваш флажок, Вы должны держать его рядом с вашим флажком или между тем же<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

 prusswan29 нояб. 2012 г., 11:53
Это слишком недооценивается, учитывая, насколько хорошо это работает!
 Tim10 мар. 2014 г., 20:36
Насколько это надежно в разных браузерах?
 user216738213 февр. 2014 г., 17:06
здесь должны быть одинаковые идентификаторы для скрытых входов и флажков?
 mik-t13 февр. 2014 г., 20:24
Нет, Id может быть любым, но «имя» и «значение» должны быть одинаковыми.
 mik-t29 апр. 2015 г., 21:40
это было протестировано и хорошо работало в последних версиях Chrome, Firefox и IE 11, вот реализация, попробуйте это в вашем браузере:mvccbl.com/...

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

<input type="checkbox" id="scales" name="feature[]" value="scales" checked="checked" onclick="this.checked=true" />

ОБНОВИТЬ: READONLY не работает на флажках

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

Просто поменяйdisabled вreadonly

 Dan Nissenbaum28 февр. 2011 г., 06:05
Чтобы получить поле ввода «только для чтения» в LOOK, как и поле «отключено», установите 'style = "color: grey; background-color: # F0F0F0;"'.
 jave.web06 сент. 2013 г., 14:32
@MattHuggins Установка значения для атрибутов only-attribute-name, таких как флажок, только для чтения и т. Д. ... и косая черта для непарных атрибутов не имеет никакого отношения к достоверности HTML - они необходимы для достоверности XHTML ...
 Meister Schnitzel25 нояб. 2014 г., 11:29
Кстати: Возможно, кто-то спотыкается об этом: НЕ ИСПОЛЬЗУЙТЕ ЭТО для кнопки ввода type = button, они не будут "отключены", используйте "disabled =" disabled ""
 Matt Huggins07 сент. 2013 г., 14:50
@ jave.web - да, ты прав. Спасибо за разъяснение!
 Matt Huggins18 янв. 2011 г., 20:20
Чтобы сделать его действительным HTML, определенно установите значение readonly в readonly, т.е.<input name="foo" value="bar" readonly="readonly" />
<input type="checkbox" checked="checked" onclick="this.checked=true" />

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

 ScottC10 окт. 2012 г., 14:09
это будет просто дублировать то, что флажок уже делает, но если он был отключен с помощью javascript или чего-то еще, он все равно будет отключен, не могли бы вы объяснить немного больше, что вы собираетесь, может быть, я неправильно понимаю, так как это всего лишь строка кода

установка атрибута 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>

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

Удалить «отключенные» атрибутыпредставить формаДобавлять атрибуты снова. Лучший способ сделать это - использовать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);

});

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

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

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

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

http://jsfiddle.net/vwUUc/

<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>

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

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

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

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

<input type="checkbox" readonly="readonly">
 NewbieProgrammer04 авг. 2017 г., 00:52
Спасибо тебе за это! По какой-то причине «скрытый» ввод не работал для меня. Это спасло меня. Очень хороший взлом действительно!

onsubmit="this['*nameofyourcheckbox*'].disabled=false" к форме.

создать класс CSS, например:

.disable{
        pointer-events: none;
        opacity: 0.5;
}

применять этот класс вместо отключенного атрибута

 commonpike29 янв. 2018 г., 18:54
input [type = checkbox] [readonly] {pointer-events: none; }!

удалите атрибут disabled при отправке формы:

$("form").submit(function() {
    $("input").removeAttr("disabled");
});
 Tristan Channing09 янв. 2014 г., 19:34
Он удаляет атрибут disabled, поэтому в теории да. На практике я не думаю, что пользователь может изменить поле через пользовательский интерфейс между этим случаем и отправляемой формой ... Мне было бы интересно узнать наверняка.
 anar khalilov09 янв. 2014 г., 10:30
Будет ли это сделать элемент управления "включен" в пользовательском интерфейсе?
 Gusstavv Gil16 дек. 2016 г., 06:12
Немного стар, но в качестве sidenote: если вы используете<select> или же<textfield> или другие элементы HTML, которые поддерживаютdisabled атрибут, вы можете выбрать их и включить все с помощью:$( "*:disabled" ).removeAttr("disabled");

Там нет другого варианта, кроме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

а затем удалить атрибут disabled перед отправкой формы.

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

Ваш ответ на вопрос