2010-09-24 5 views
13

Я хотел бы иметь группу HTML-текста <input>, которая может быть полностью отключена (отключена) одновременно. Я также хочу, чтобы вся область, в которой они находятся, каким-то образом была серой или, по крайней мере, явно отключена. Я видел такие вещи, как это сделано в настольных приложениях.Как сделать greyed-out HTML-форму?

Любые идеи относительно простого/элегантного способа сделать это? Я стараюсь, чтобы вручную не устанавливать вручную disabled="disabled", а также иметь область , окружающую <input>, что означает, что вся часть формы не редактируется.

EDIT: К сожалению, я должен упомянуть еще несколько вещей ...

  1. Все местные. Я не использую PHP или ASP или что-то в этом роде ... просто HTML, JavaScript и CSS. Также нет jquery!
  2. Я хочу, чтобы включить/отключить «область» динамически с JavaScript
  3. Это НЕ <form>, просто куча <input> «s
+0

вы хотите '' элементов отключены со статической HTML или динамически отключить с помощью Javascript или что-то делать? В какой-то мере я изучил динамические формы в [этом вопросе] (http://stackoverflow.com/questions/3398603/how-to-create-a-dynamic-form-using-jquery/3408517#3408517); даже создал плагин [jQuery] (http://github.com/macek/jquery-input-depends-on). –

ответ

18

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

В качестве альтернативы вы можете разместить частично прозрачный div поверх поля. Это также обеспечит некоторую блокировку элементов формы от щелчков мыши, но не защитит их от табуляции. Вы все равно должны отключить элементы формы.

+1

Я попытался отключить все входы на submit. Это вызвало проблемы с MVC3. Он не будет правильно возвращать модель, когда я отключу все в форме. – user1003221

+1

по умолчанию, отключенные элементы HTML не распространяют свои значения на запрос на отправку. Используйте readonly, если это не желательно. – Filip

0

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

for (x=0; x<document.YOURFORM.elements.length; x++) { 
    document.YOURFORM.elements[x].disabled=true; 
} 
8
for(i=0; i<document.FormName.elements.length; i++) { 
    document.FormName.elements[i].disabled=true; 
} 
document.getElementById("surroundingarea").style.backgroundColor = "#CCCCCC"; 

петли через элементы формы с именем FORMNAME и отключить каждый элемент .. затем изменить цвет фона окружающего элемента

2

Вы можете просто использовать JQuery, чтобы отключить все способы элементов в этой области, как:


    //assuming that area is a div element with id lets say disabled-area 
    $(document).ready(function(){ 
    $("#disabled-area input").attr("disabled", "disabled"); 
    }); 

Я не проверял, так что я надеюсь, что это будет работать :)

+0

Этот код работает. – Samarland

2

Если вы говорите, что не хотите играть с «отключенным» свойством - тогда вы также можете позиционировать прозрачную DIV над формой HTML, которая (в стиле правильно) может сделать форму вида отключенной - пользователи смогут увидеть формы, но не нажимайте/не вводите в нее какую-либо информацию ... Затем, основываясь на каком-то событии, вы просто можете удалить/скрыть этот DIV с помощью JS и сделать форму «включенной».

+0

Мне нравится эта идея для «седеющей» области. Как сделать div float над другой областью? Я только делал линейные div ... –

+0

Вы можете сделать это, используя абсолютное/относительное позиционирование CSS. Их можно напрямую настроить через JS или использовать некоторую библиотеку JS, такую ​​как jQuery, что упрощает работу ... – Laimoncijus

0

пожалуйста заметьте: если вы инвалидов>

вход-элемент не будет передан, если пользователь отправляет форму.

что вы хотите сделать вместо этого:

<input type="text" name="surname" value="Korpela" readonly> 

если форма находится внутри, что разрезать торт на

<div style="background-color; grey;"> 

Does?

https://www.cs.tut.fi/~jkorpela/forms/readonly.html

+0

Не должно ли оно быть readonly = "true"? –

+0

Он хочет сделать его серым. 'readonly' не делает этого, он только отключает управление клавиатурой. – Thielicious

0

Люди здесь не имеют ответы с петлями - нет необходимости. Используйте .children().

$('form').children().prop('disabled',true); 

jsfiddle