Как я могу отключить все внутри формы, используя javascript / jquery? - PullRequest
42 голосов
/ 02 августа 2010

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

Ответы [ 9 ]

39 голосов
/ 02 августа 2010

Вы можете использовать селектор :input и сделать это:

$("#myForm :input").prop('readonly', true);

:input выбирает все <input>, <select>,<textarea> и <button> элементы.Также атрибутом является readonly, если вы используете disabled для элементов, которые они не будут размещены на сервере, поэтому выберите, какое свойство вы хотите, основываясь на этом.

36 голосов
/ 02 августа 2010

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

var form = document.getElementById("your_form_id");
var elements = form.elements;
for (var i = 0, len = elements.length; i < len; ++i) {
    elements[i].readOnly = true;
}
29 голосов
/ 06 августа 2013

В HTML5 можно отключить все входные данные, содержащиеся в атрибуте <fieldset disabled />.

инвалидов:

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

Ссылка: MDC: fieldset

4 голосов
/ 29 июня 2015

Это чистый Javascript:

var fields = document.getElementById("YOURDIVID").getElementsByTagName('*');
for(var i = 0; i < fields.length; i++)
{
    fields[i].disabled = true;
}
3 голосов
/ 19 ноября 2017

Вы можете сделать это самым простым способом, используя jQuery.Это будет сделано для всех элементов input, select и textarea (даже если их число больше одного).

$("input, select, option, textarea", "#formid").prop('disabled',true);

или вы также можете сделать это, ноэто отключит все элементы (только те элементы, к которым он может быть применен).

$("*", "#formid").prop('disabled',true);


свойство disabled может применяться к следующим элементам:

  • fieldset
  • input
  • optgroup
  • option
  • select
  • textarea

Но вам решать, что вы предпочитаете использовать.

1 голос
/ 02 августа 2010
$("#formid input, #formid select").attr('disabled',true);

или сделать его доступным только для чтения:

$("#formid input, #formid select").attr('readonly',true);
0 голосов
/ 30 мая 2019

Старый вопрос, но никто не упомянул использование css:

pointer-events: none;

Вся форма становится защищенной от щелчка, но также зависает .

0 голосов
/ 15 апреля 2015
// get the reference to your form 
// you may need to modify the following block of code, if you are not using ASP.NET forms  
var theForm = document.forms['aspnetForm'];
if (!theForm) {
 theForm = document.aspnetForm;
}

// this code disables all form elements  
var elements = theForm.elements;
for (var i = 0, len = elements.length; i < len; ++i) {
 elements[i].disabled = true;
}
0 голосов
/ 04 июня 2013

Спасибо, Тим,

Это было действительно полезно. Я немного изменил настройки, когда у нас есть элементы управления, и мы обрабатываем событие на них.

 var form = document.getElementById("form");
                var elements = form.elements;
                for (var i = 0, len = elements.length; i < len; ++i) {
                    elements[i].setAttribute("onmousedown", "");
                }
...