Чи можна встановити прапорці HTML для лише читання?


817

Я думав, що це може бути, але оскільки я не кладу свої гроші туди, куди рот (так би мовити), встановлення атрибута readonly насправді, здається, нічого не робить.

Я вважаю за краще не використовувати інвалідів, оскільки я хочу, щоб прапори були подані з рештою форми, я просто не хочу, щоб клієнт міг їх змінити за певних обставин.


39
(Зловмисний) клієнт завжди може змінити значення прапорця (або надіслати довільні запити). Завжди переконайтеся, що ви робите належну перевірку на сервері!
knittl

4
@knittl Але звичайний вістор не має (зловмисного) клієнта. І звичайний Вістор не хотів міняти інформацію (Це сенс readonly)
Крістіан Голхардт

3
@knittl Ви, здається, відкидаєте все почуття readonly! Чому тоді цей атрибут існував би!
Іжар Аазмі

10
@IzharAazmi: readonlyце лише атрибут на стороні клієнта, який допомагає браузеру правильно візуалізувати сайт та потім створити з нього правильний запит. Сервер не може і не повинен знати про readonlyатрибут наданої сторінки. Він повинен припускати, що запит надходив з будь-якого місця (і, можливо, з шкідливими намірами); ніколи не покладайтеся на надані користувачем введення. Тим не менш, навіщо надсилати значення прапорця, яке ви не можете редагувати у запиті (якщо ви встановили значення перед наданням, ви вже знаєте це значення при поданні запиту, тому немає необхідності передавати його в запиті)
knittl

4
@knittl Я згоден! Але ви бачите, що readonlyатрибут існує чомусь там. Це, звичайно, не має нічого спільного з реалізацією на стороні сервера. Але саме там потрібно сказати користувачеві "Ей! Це значення передбачається тут, та / але ви не можете цього змінити".
Іжар Аазмі

Відповіді:


538

Ви можете скористатися цим:

<input type="checkbox" onclick="return false;"/>

Це працює, тому що повернення помилки від події клацання зупиняє ланцюг виконання.


29
Повернення помилки у javascript запобігає продовженню ланцюга виконання для обробника клацання чи ключа. Не має нічого спільного зі станом прапорця
Джессіка Браун

9
PS ... якщо ви хочете, щоб прапорець знаходився у встановленому стані, вам потрібно додати checked="checked", а не возитися з javascript. Javascript якраз там, щоб змусити ігнорувати клацання миші на вхідному об’єкті, а не встановлювати стан прапорця.
Джессіка Браун

8
У цьому випадку візуальної індикації статусу r / o немає.
Джессі Глік

11
Однак не дозволяє використовувати TAB для переходу до наступного входу.
користувач327961

7
Помилка повністю, якщо JavaScript відключений!
Зробити

419

READONLYне працює на прапорцях , як це заважає вам редагування поля в значенні , але за допомогою прапорця ви на самому справі редагування поля в стані (на || викл)

З сайту faqs.org :

Важливо розуміти, що РЕАЛЬНО просто заважає користувачеві змінювати значення поля, а не взаємодіяти з полем. Наприклад, у вікнах прапорця ви можете перевіряти їх і вимикати (таким чином встановлюючи стан CHECKED), але ви не змінюєте значення поля.

Якщо ви не хочете використовувати, disabledале все ж хочете подати значення, як щодо подання значення як прихованого поля та просто надрукування його вмісту користувачеві, коли вони не відповідають критеріям редагування? напр

// user allowed change
if($user_allowed_edit)
{
    echo '<input type="checkbox" name="my_check"> Check value';
}
else
{
    // Not allowed change - submit value..
    echo '<input type="hidden" name="my_check" value="1" />';
    // .. and show user the value being submitted
    echo '<input type="checkbox" disabled readonly> Check value';
}

135
Працює, але це щось на кшталт .. добре забруднене, тільки на контрольних полях слід просто робити те, що підказує інтуїція.
левхіта

8
Інтуїція нас обдурює, як пояснив ConroyP.
ANeves

120
Інтуїція не обманює США, вона обдурила тих, хто реалізував прапорець таким чином.
Каліфорнія

@ConroyP -> "це заважає вам редагувати значення поля, але за допомогою поля ви фактично редагуєте стан поля (у || вимкнено)". Це справді слабке обґрунтування рішення, яке несе голову. "Держава" та "цінність" для більшості з нас є такими ж, як "toMAYto" та "toMAHto", як ви можете бачити за результатами опитування людей, які не погоджуються.
МакОлі

343

Це прапорець, який ви не можете змінити:

<input type="checkbox" disabled="disabled" checked="checked">

Просто додайте disabled="disabled"як атрибут.


Редагувати, щоб адресувати коментарі:

Якщо ви хочете, щоб дані були розміщені назад, ніж просте рішення - застосувати те саме ім'я до прихованого вводу:

<input name="myvalue" type="checkbox" disabled="disabled" checked="checked"/>
<input name="myvalue" type="hidden" value="true"/>

Таким чином, коли прапорець встановлено "вимкнено", він служить лише для візуального подання даних, а не фактично "пов'язаний" з даними. У списку публікації значення прихованого входу надсилається, коли прапорець відключений.


331
Зауважте, що прапорець "Вимкнено" не надсилає значення через дані POST.
біфоб

66
@powtac Ви не відповідаєте на те, що він хоче розміщувати дані, ваш приклад цього не робить.
Девід Мартенссон

70
Неможливо, щоб ця відповідь мала 105 змін. Це суперечить усьому, що заявляє ОП.
JM4

15
@nathanhayfield: за цією логікою я мав би змогу розмістити корисні відповіді на будь-яку тему та отримати резюме. :(
Майкл Брей

24
@MichaelBray Я здогадуюсь, що це отримує багато оновлень, оскільки багато людей хочуть знати, як зробити прапорці лише для читання, щоб вони це зробили: 1) Google "Checkbox readlyly". 2) Перевірте, що назва цього питання відповідає тому, що вони хочуть зробити, і натисніть на нього. 3) Прокрутіть вниз, поки вони не знайдуть цю відповідь. 4) Щастя і прихильність.
Марк Байєрс

63
<input type="checkbox" onclick="this.checked=!this.checked;">

Але ви абсолютно ОБОВ'ЯЗКОВО перевіряєте дані на сервері, щоб переконатися, що вони не були змінені.


4
Я вважав це найкращим рішенням; Крім того, я можу зателефонувати ще на частину коду (скажімо, якусь штучку jquery), щоб відобразити приємний маленький знак, який говорить: "Ви не можете змінити це, доки вперше не зробите x". Тож щось на кшталт: "... onclick = 'this. checked =! This. checked; javascript: theCheckboxWasClicked ();' ..."
Бейн

Це не сірі коробки, як у відповіді powtac, так що я отримав мій голос
EHarpham

Це трохи хакіт, але це геніальний, ідеальний, майже елегантний маленький хак.
Рассел

Найкраще рішення. Слід позначити як правильну відповідь.
Скотті

3
Як було сказано вище, це не працює при подвійному клацанні в IE. Я використав: onchange = "цей.проведений = вірно;"
Рітікеш

57

ще одне "просте рішення":

<!-- field that holds the data -->
<input type="hidden" name="my_name" value="1" /> 
<!-- visual dummy for the user -->
<input type="checkbox" name="my_name_visual_dummy" value="1" checked="checked" disabled="disabled" />

disabled = "вимкнено" / disabled = вірно


1
Це вирішує всі питання: створює прапорець лише для читання, подає дані POST та забезпечує візуальну вказівку на доступ лише для читання (на відміну від усіх рішень javascript)
Далібор Фривальдський,

2
Ви також можете впасти nameі valueатрибути з вашого манекена коробки, також ="checked"і ="diabled"ATTRIB-значення можуть бути знижені. w3.org/TR/html-markup/input.checkbox.html
Сампо Саррала - codidact.org

Найголовніше, що це рішення - це звичайний старий HTML і не покладається на Javascript.
GlennG

45

Це представляє невелику проблему зручності використання.

Якщо ви хочете відобразити прапорець, але не дозволяти йому взаємодіяти, чому тоді навіть прапорець?

Однак моїм підходом було б використання відключеного (Користувач очікує, що прапорець відключеного не може бути редагований, замість того, щоб використовувати JS, щоб увімкнути не працює) та додати обробник форми подання за допомогою JavaScript, який дозволяє встановити прапорці прямо перед формою подано. Таким чином ви отримуєте свої цінності.

тобто щось подібне:

var form = document.getElementById('yourform');
form.onSubmit = function () 
{ 
    var formElems = document.getElementsByTagName('INPUT');
    for (var i = 0; i , formElems.length; i++)
    {  
       if (formElems[i].type == 'checkbox')
       { 
          formElems[i].disabled = false;
       }
    }
}

22
Інший варіант - відобразити відключений прапорець (або зображення або що-небудь для позначення відміченого / невизначеного) та прихований вхід, який обробляється сервером.
Хуан Мендес

5
Справа не в застосуванні, коли ви отримали форму, в якій якесь ваше рішення впливає на інші входи (він же: встановлення значення, яке не можна торкнутися, якщо ви не скасуєте свою першу дію.) Я ненавиджу, коли люди намагаються змінити свою думку, а не відповідати (це не про вас @FlySwat, ви відповіли).
Ферисон

7
Мета - використовувати прапорець як поле відображення "це значення є істинним", що простіше сканувати таблицю вниз, ніж купу "true" / "false" -s. Звичайно, ви можете використовувати піктограму, але, у формі, прапорці здаються там, дозрілими для використання.
Оліє

1
Я зазвичай використовую це рішення, але .. інколи користувачі, особливо при повільному з'єднанні, бачать кнопки введення, включені після подання форми, і вирішують грати з нею.
systempuntoout

2
Припустимо, у вас є низка "функцій", які можна включити чи ні, тому у вас є шаблон, який відображає прапорець у цій функції. Але іноді функція є обов'язковою умовою для чогось іншого ... тому ОБОВ'ЯЗКОВО бути включеним, але ви не хочете змінювати шаблон. Саме для цього призначений прапорець для вимкнення / встановлення. Вони існують назавжди, тому я сподіваюся, що питання "чому навіть прапорець" було риторичним.
Трайнко

38
<input type="checkbox" readonly="readonly" name="..." />

з jquery:

$(':checkbox[readonly]').click(function(){
            return false;
        });

все ще може бути хорошою ідеєю дати деякий візуальний натяк (css, текст, ...), що управління не прийме введення.


Для мене це не працювало в ie6, фільтр атрибутів readonly не працює належним чином. Я вийняв це з фільтра і поставив перевірку атрибутів в тілі функції, і він працює добре в ie6.
gt124

3
Я використовував "data-readonly = true" замість стандартного атрибута, і він працює чудово у всіх браузерах. Мені це рішення подобається більше, ніж іншим вище +1
peipst9lker

1
Селектором повинен бути $(':checkbox[readonly]')встановити всі прапорці для кандидатів, оскільки readonlyзначення атрибута необов’язкове.
Іжар Аазмі

21

Я використовував це для досягнення результатів:

<input type=checkbox onclick="return false;" onkeydown="return false;" />

У моєму випадку це працює без крапки з комою, інакше не виходить.
Mwiza

12

Я випадково помітив рішення, подане нижче. Я знайшов це моє дослідження з тієї ж проблеми. Я не маю, хто це розмістив, але це не було зроблено мною. Він використовує jQuery:

$(document).ready(function() {
    $(":checkbox").bind("click", false);
});

Це зробить прапорці лише для читання, що було б корисно для відображення даних, які читаються лише для клієнта.


1
Питання задає прапорець для повторного читання, а не інвалід. Тож це найправильніша відповідь.
NileshChauhan

9
onclick="javascript: return false;"

Гммм ... це працює для помилкового / неперевіреного випадку, але onclick="javascript: return true;"просто змушує його діяти як звичайний прапорець. Підказки? Дякую!
Оліє

@Olie, додай checkedатрибут і тримай своє falseмісце.
Qwertiy

7

Відповідь запізніла, але більшість відповідей, здається, занадто ускладнює її.

Як я розумію, ОП в основному хотіла:

  1. Показуйте лише прапорець, щоб показати статус.
  2. Значення повертається з формою.

Слід зазначити, що:

  1. ОП воліла не використовувати disabledатрибут, оскільки вони "хочуть, щоб відмічені прапори були подані з рештою форми".
  2. Невірно встановлені прапорці не подаються із формою, оскільки цитата з ОП у 1. вище вказує, що вони вже знали. В основному, значення прапорця існує лише в тому випадку, якщо воно встановлено.
  3. Відключений прапорець чітко вказує, що його не можна змінити за дизайном, тому користувач навряд чи намагатиметься його змінити.
  4. Значення прапорця не обмежується вказівкою його статусу, наприклад, yesабо false, але може бути будь-яким текстом.

Тому, оскільки readonlyатрибут не працює, найкращим рішенням, що не потребує JavaScript, є:

  1. Відключений прапорець без імені та значення.
  2. Якщо прапорець повинен відображатися як встановлений прапорець, приховане поле з ім'ям та значенням, збереженими на сервері.

Отже, для встановленого прапорця:

<input type="checkbox" checked="checked" disabled="disabled" />
<input type="hidden" name="fieldname" value="fieldvalue" />

Для невірно встановленого прапорця:

<input type="checkbox" disabled="disabled" />

Основна проблема з відключеними входами, особливо прапорцями, полягає в їх поганому контрасті, що може бути проблемою для деяких з певними вадами зору. Можливо, краще вказати значення простими словами, такими як Status: noneабо Status: implemented, але включаючи прихований ввід вище, коли використовується останнє, наприклад:

<p>Status: Implemented<input type="hidden" name="status" value="implemented" /></p>


7

Більшість поточних відповідей мають одну або декілька таких проблем:

  1. Перевірте лише клавіатуру миші.
  2. Перевірити лише на завантаженні сторінки.
  3. Підключіть постійно популярну зміну або надсилайте події, які не завжди спрацюють, якщо щось інше їх підчепило.
  4. Потрібні приховані дані або інші спеціальні елементи / атрибути, які потрібно скасувати, щоб повторно включити прапорець за допомогою javascript.

Далі просто і не має жодної з цих проблем.

$('input[type="checkbox"]').on('click keyup keypress keydown', function (event) {
    if($(this).is('[readonly]')) { return false; }
});

Якщо прапорець буде прочитаний тільки що, він не зміниться. Якщо ні, то буде. Він використовує jquery, але ви, ймовірно, вже використовуєте це ...

Це працює.



6

Якщо ви хочете, щоб вони були передані на сервер із формою, але не були взаємодіючими для користувача, ви можете використовувати pointer-events: nonecss ( працює у всіх сучасних браузерах, крім IE10- і Opera 12- ) і встановити вкладку-індекс,  -1щоб запобігти зміні через клавіатуру. Також зауважте, що ви не можете використовувати labelтег, оскільки натискання на нього все одно змінить стан.

input[type="checkbox"][readonly] {
  pointer-events: none !important;
}

td {
  min-width: 5em;
  text-align: center;
}

td:last-child {
  text-align: left;
}
<table>
  <tr>
    <th>usual
    <th>readonly
    <th>disabled
  </tr><tr>
    <td><input type=checkbox />
    <td><input type=checkbox readonly tabindex=-1 />
    <td><input type=checkbox disabled />
    <td>works
  </tr><tr>
    <td><input type=checkbox checked />
    <td><input type=checkbox readonly checked tabindex=-1 />
    <td><input type=checkbox disabled checked />
    <td>also works
  </tr><tr>
    <td><label><input type=checkbox checked /></label>
    <td><label><input type=checkbox readonly checked tabindex=-1 /></label>
    <td><label><input type=checkbox disabled checked /></label>
    <td>broken - don't use label tag
  </tr>
</table>


Дозвольте повторити ваше останнє речення (я пропустив його і витратив дорогоцінний час): ваша техніка марна, якщо є <label> (у Firefox вона справді працює відмінно. Проблема стосується Chrome).
Нікколо М.

@NiccoloM., Але якщо ви знаєте, що воно читається лише на чолі, навіщо його загортати в мітку? Також ви можете поставити ярлик після нього і використовувати forатрибут. У такому випадку ви можете використовувати input[type="checkbox"][readonly] + label { pointer-events: none !important; }.
Qwertiy

@KevinBui, ви видалили labelта додали tabindex? Як встановити фокус на нефокусований елемент, щоб натиснути на ньому пробіл?
Qwertiy


5

Деякі відповіді тут здаються трохи крутими, але ось невеликий злом.

<form id="aform" name="aform" method="POST">
    <input name="chkBox_1" type="checkbox" checked value="1" disabled="disabled" />
    <input id="submitBttn" type="button" value="Submit" onClick='return submitPage();'>
</form>

то в jquery ви можете вибрати один з двох варіантів:

$(document).ready(function(){
    //first option, you don't need the disabled attribute, this will prevent
    //the user from changing the checkbox values
    $("input[name^='chkBox_1']").click(function(e){
        e.preventDefault();
    });

    //second option, keep the disabled attribute, and disable it upon submit
    $("#submitBttn").click(function(){
        $("input[name^='chkBox_1']").attr("disabled",false);
        $("#aform").submit();
    });

});

Сігналы абмеркавання

демо: http://jsfiddle.net/5WFYt/


3
І це не "обхід" ??
KoZm0kNoT

ні, це досить прямо .. це просто не лаконічно.
sksallaj

4

Спираючись на вищенаведені відповіді, якщо ви використовуєте jQuery, це може бути хорошим рішенням для всіх матеріалів:

<script>
    $(function () {
        $('.readonly input').attr('readonly', 'readonly');
        $('.readonly textarea').attr('readonly', 'readonly');
        $('.readonly input:checkbox').click(function(){return false;});
        $('.readonly input:checkbox').keydown(function () { return false; });
    });
</script>

Я використовую це з Asp.Net MVC для встановлення деяких елементів форми лише для читання. Наведене вище працює для тексту та прапорців, встановлюючи будь-який батьківський контейнер як .readonly, наприклад, такі сценарії:

<div class="editor-field readonly">
    <input id="Date" name="Date" type="datetime" value="11/29/2012 4:01:06 PM" />
</div>
<fieldset class="flags-editor readonly">
     <input checked="checked" class="flags-editor" id="Flag1" name="Flags" type="checkbox" value="Flag1" />
</fieldset>

4
<input type="radio" name="alwaysOn" onchange="this.checked=true" checked="checked">
<input type="radio" name="alwaysOff" onchange="this.checked=false" >

4

Я знаю, що "інвалід" не є прийнятною відповіддю, оскільки оператор хоче, щоб він розмістив. Однак, вам завжди доведеться перевіряти значення на стороні сервера НАДІЛЬКО, якщо у вас встановлена ​​опція для читання. Це тому, що ви не можете зупинити зловмисного користувача публікувати значення за допомогою атрибута readonly.

Я пропоную зберегти вихідне значення (сторону сервера) та встановити його на вимкнено. Потім, коли вони надсилають форму, ігноруйте будь-які розміщені значення та приймайте початкові значення, які ви зберегли.

Це виглядатиме та поводитиметься так, ніби це цінність лише для читання. І він обробляє (ігнорує) публікації від шкідливих користувачів. Ти вбиваєш 2 птахи одним каменем.


3

Я б прокоментував відповідь ConroyP, але для цього потрібно 50 репутацій, яких у мене немає. У мене достатньо репутації, щоб написати ще одну відповідь. Вибачте.

Проблема у відповіді ConroyP полягає в тому, що прапорець не змінюється, навіть не включаючи його на сторінку. Хоча Electrons_Ahoy не передбачає стільки, найкращою відповіддю була б така, у якій незмінний прапорець виглядатиме схожим, якщо не таким, як змінний прапорець, як це має місце, коли застосовується атрибут "вимкнено". Рішення, яке стосується двох причин, які Electrons_Ahoy дає за те, що не хоче використовувати атрибут "disabled", не обов'язково було б недійсним, оскільки воно використовувало атрибут "disabled".

Припустимо дві булеві змінні, $ перевірені та $ відключені:

if ($checked && $disabled)
    echo '<input type="hidden" name="my_name" value="1" />';
echo '<input type="checkbox" name="my_name" value="1" ',
    $checked ? 'checked="checked" ' : '',
    $disabled ? 'disabled="disabled" ' : '', '/>';

Поставте прапорець як встановлений прапорець, якщо $ прапорець вірно. Поле галочки відображається як галочка, якщо $ check невірна. Користувач може змінити стан прапорця, якщо і лише якщо $ disabled є хибним. Параметр "my_name" не публікується, коли прапорець не встановлений, користувачем чи ні. Параметр "my_name = 1" розміщується, коли прапорець встановлений, користувачем чи ні. Я вважаю, що саме це шукало Electrons_Ahoy.


3

Ні, прапорці введення не можна зчитувати лише.

Але ви можете зробити їх лише за допомогою javascript!

Додайте цей код в будь-який час у будь-який час, щоб змусити прапорець читатись повністю, як передбачалося, не дозволяючи користувачеві будь-яким чином змінювати його.

jQuery(document).on('click', function(e){
      // check for type, avoid selecting the element for performance
      if(e.target.type == 'checkbox') {
          var el = jQuery(e.target);
          if(el.prop('readonly')) {
              // prevent it from changing state
              e.preventDefault();
          }
      }
});
input[type=checkbox][readonly] {
    cursor: not-allowed;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label><input type="checkbox" checked readonly> I'm readonly!</label>

Ви можете додати цей скрипт у будь-який час після завантаження jQuery.

Він буде працювати для динамічно доданих елементів.

Він працює, вибираючи подію натискання (що відбувається до події зміни) на будь-якому елементі сторінки, потім перевіряє, чи цей елемент є прапором для повторного читання, а якщо він є, то блокує зміни.

Є так багато ifs, щоб це не вплинуло на продуктивність сторінки.


3

Просто використовуйте простий відключений тег, як цей нижче.

<input type="checkbox" name="email"  disabled>

6
"Тег для інвалідів" не надсилатиме ці дані
Przemysław


2

Якщо ви хочете, щоб ВСІ ваші прапорці були "заблоковані", щоб користувач не міг змінити стан "зареєстрований", якщо присутність "лише для читання", ви можете використовувати jQuery:

$(':checkbox').click(function () {
    if (typeof ($(this).attr('readonly')) != "undefined") {
        return false;
    }
});

Класна річ у цьому коді полягає в тому, що він дозволяє змінювати атрибут "readonly" у всьому коді без необхідності повторного введення кожного прапорця.

Він працює і для радіо кнопок.


1

Основна причина, за якою люди хочуть встановити прапорець лише для читання та (також) радіогрупу лише для читання, - це те, що інформація, яку неможливо змінити, може бути повернута користувачеві у формі, в яку вона була введена.

OK відключено це зробить - на жаль, вимкнені елементи керування не користуються клавіатурою, тому вони не відповідають усім законодавству про доступність. Це НАЙБІЛЬШЕ завивання в HTML, яке я знаю.


1

Внесок дуже дуже пізно ... але все одно. Під час завантаження сторінки використовуйте jquery, щоб вимкнути всі прапорці, крім вибраного на даний момент. Потім встановіть вибраний на даний момент лише як прочитаний, щоб він мав схожий вигляд з вимкненими. Користувач не може змінити значення, і вибране значення все одно подає.


1

Дуже пізно до вечірки, але я знайшов відповідь на MVC (5) Я відключив CheckBox і додав прихованийФОРЕЖЕ ДО ПЕРЕД прапорець, тому коли він публікує, якщо спочатку знаходить приховане поле та використовує це значення. Це справді працює.

 <div class="form-group">
     @Html.LabelFor(model => model.Carrier.Exists, new { @class = "control-label col-md-2" })
         <div class="col-md-10">
              @Html.HiddenFor(model => model.Carrier.Exists)
              @Html.CheckBoxFor(model => model.Carrier.Exists, new { @disabled = "disabled" })
              @Html.ValidationMessageFor(model => model.Carrier.Exists)
          </div>
 </div>

1

Я використовував би атрибут readonly

<input type="checkbox" readonly>

Потім використовуйте CSS для відключення взаємодій:

input[type='checkbox'][readonly]{
    pointer-events: none;
}

Зауважте, що використання псевдокласу: лише для читання тут не працює.

input[type='checkbox']:read-only{ /*not working*/
    pointer-events: none;
}

0

Я просто не хочу, щоб клієнт міг змінити їх за певних обставин.

НАЙКРАДНО сам не працюватиме. Можливо, ви зможете зробити щось приємне без CSS, але ми зазвичай просто відключаємо їх.

ПОПЕРЕДЖЕННЯ. Якщо вони розміщені назад, клієнт може змінити їх, відтермінувати. Ви не можете покладатися лише на читання, щоб запобігти користувачеві щось змінити. Завжди можна використовувати Fiddler або просто шанувати html w / firebug або щось подібне.


Ви абсолютно праві, тому я також перевіряю, що на стороні сервера, встановлюючи це лише для покращення роботи користувачів на стороні клієнта.
левхіта

0

Моє рішення насправді протилежне рішенню FlySwat, але я не впевнений, чи вдасться він працювати у вашій ситуації. У мене є група прапорців, і в кожному є обробник onClick, який подає форму (вони використовуються для зміни налаштувань фільтра для таблиці). Я не хочу дозволити кілька кліків, оскільки наступні кліки після першого ігноруються. Тому я вимикаю всі прапорці після першого клацання та після надсилання форми:

onclick="document.forms['form1'].submit(); $('#filters input').each(function() {this.disabled = true});"

Поле прапорців міститься в прольотному елементі з ідентифікатором "фільтрів" - друга частина коду є оператором jQuery, який повторюється через прапорці і вимикає кожен. Таким чином, значення прапорців все ще надсилаються через форму (оскільки форма була подана перед відключенням), і це не дозволяє користувачеві змінювати їх, поки сторінка не завантажиться.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.