Kaip užtikrinti, kad formos laukas <select> būtų išsiųstas, kai jis yra išjungtas?

Turiu select formos lauką, kurį noriu pažymėti kaip „tik skaitymą“, nes vartotojas negali keisti vertės, bet vertė vis dar pateikiama su forma. disabled atributo naudojimas neleidžia vartotojui keisti vertės, bet neperleidžia vertės per formą.

readonly atributas galimas tik input ir textarea laukams, tačiau tai iš esmės yra tas, ko noriu. Ar yra būdas tai padaryti?

Dvi galimybės manau:

  • Vietoj to, kad išjungtumėte select išjunkite visas option ir naudokite CSS, kad pažymėtumėte pilką, kad jis atrodytų išjungtas.
  • Į pateikimo mygtuką pridėkite paspaudimo įvykio tvarkyklę, kad prieš pateikiant formą būtų galima išjungti visus išjungtus meniu meniu.
145
28 июля '09 в 2:01 2009-07-28 02:01 Marquis Wang paklausė liepos 28 d., 09:01, 2009-07-28 02:01
@ 15 atsakymų
 <select disabled="disabled"> .... </select> <input type="hidden" name="select_name" value="selected value" /> 

Tais atvejais, kai select_name yra pavadinimas, kurį paprastai nurodote <select> .

Kita galimybė.

 <select name="myselect" disabled="disabled"> <option value="myselectedvalue" selected="selected">My Value</option> .... </select> <input type="hidden" name="myselect" value="myselectedvalue" /> 

Dabar tai pastebėjau, kad, priklausomai nuo jūsų naudojamo žiniatinklio serverio, gali tekti įdėti hidden įvestį prieš arba po <select> .

Jei mano atmintis teisingai tarnauja man, su IIS, jūs ją įdėjote prieš Apache, kurią jūs įdėjote. Kaip visada, bandymas yra labai svarbus.

96
28 июля '09 в 2:04 2009-07-28 02:04 atsakymą pateikė Jordan S. Jones liepos 28 d., 09:04, 2009-07-28 02:04

Išjunkite laukus ir įgalinkite juos prieš pateikdami formą:

JQuery kodas:

 jQuery(function ($) { $('form').bind('submit', function () { $(this).find(':input').prop('disabled', false); }); }); 
194
28 июля '09 в 3:38 2009-07-28 03:38 atsakymas pateikiamas Tres liepos 28 d., 09:38, 2009-07-28 03:38

Aš ieškojau šio sprendimo ir kadangi neradau šios temos sprendimo, padariau savo sprendimą.

 // With jQuery $('#selectbox').focus(function(e) { $(this).blur(); }); 

Paprasta, jūs tiesiog neryškus lauką, kai sutelkiate dėmesį į jį, kažką panašaus į jį išjungti, bet siunčiate savo duomenis.

10
14 сент. Jean Paul Rumeau atsakymas 14 sept. 2012-09-14 04:18 '12 at 4:18 2012-09-14 04:18

Jis neveikia su selektoriumi: norėdami pasirinkti laukus, naudokite:

  jQuery(function() { jQuery('form').bind('submit', function() { jQuery(this).find(':disabled').removeAttr('disabled'); }); }); 
6
25 янв. atsakymas pateikiamas chhalpha 25 d 2013-01-25 10:47 '13, 10:47, 2013-01-25 10:47

Buvau šiek tiek kitokiu scenarijumi, nes tiesiog nenorėjau, kad vartotojas galėtų pakeisti pasirinktą vertę pagal ankstesnį pasirinkimo laukelį. Tai, ką galėjau baigti, buvo tiesiog išjungti visas kitas neišrinktas parinktis dėžutėje naudojant

 $('#toSelect')find(':not(:selected)').attr('disabled','disabled'); 
6
02 мая '13 в 5:18 2013-05-02 05:18 atsakymas duotas trafalmadorui 02 Gegužės 13 d. 5:18 2013-05-02 05:18

Tas pats sprendimas, kurį pasiūlė Tres , nenaudojant jQuery

 <form onsubmit="document.getElementById('mysel').disabled = false;" action="..." method="GET"> <select id="mysel" disabled="disabled">....</select> <input name="submit" id="submit" type="submit" value="SEND FORM"> </form> 

Tai gali padėti kas nors geriau suprasti, bet akivaizdžiai mažiau lankstumo nei jQuery.

5
10 нояб. Atsakymą pateikė Marco Demaio lapkričio 10 d. 2011-11-10 14:47 '11 at 14:47 2011-11-10 14:47

Naudoju šį kodą, jei norite išjungti pasirinktis

 <select class="sel big" id="form_code" name="code" readonly="readonly"> <option value="user_played_game" selected="true">1 Game</option> <option value="coins" disabled="">2 Object</option> <option value="event" disabled="">3 Object</option> <option value="level" disabled="">4 Object</option> <option value="game" disabled="">5 Object</option> </select> // Disable selection for options $('select option:not(:selected)').each(function(){ $(this).attr('disabled', 'disabled'); }); 
5
11 дек. Atsakymas pateikiamas Aleks . 2012-12-11 14:30 '12 14:30 val. 2012-12-11 14:30

Prieš pateikdami pridėkite eilutę.

$ ("# XYZ") removeAttr ("išjungta");.

4
23 марта '13 в 15:39 2013-03-23 15:39 atsakymą PPB pateikė kovo 23 d. 13 val. 15:39 2013-03-23 ​​15:39

Arba naudokite tam tikrą „JavaScript“, kad pakeistumėte pasirinkimo pavadinimą ir jį išjungtumėte. Taigi, pasirinkimas vis dar siunčiamas, bet naudojamas nežinomas pavadinimas.

2
28 июля '09 в 2:04 2009-07-28 02:04 atsakymą pateikė „ Byron Whitlock“ liepos 28 d., 09:04, 2009-07-28 02:04

Paprasčiausias būdas rasti būdą yra sukurti mažą „JavaScript“ funkciją, susijusią su jūsų forma:

 function enablePath() { document.getElementById('select_name').disabled= ""; } 

ir jūs jį vadinate savo forma:

 <form action="act.php" method="POST" name="form_name" onSubmit="enablePath();"> 

Arba galite jį skambinti naudodami funkciją, kurią naudosite formai patvirtinti :)

2
23 февр. Alex PARISOT atsakymas, pateiktas vasario 23 d. 2012-02-23 16:14 '12, 16:14 pm 2012-02-23 16:14

Remiantis Jordanijos sprendimu, sukūriau funkciją, kuri automatiškai sukuria paslėptą įvestį, turintį tą patį pavadinimą ir tą pačią pasirinkimo vertę, kurią norite tapti negaliojančia. Pirmasis parametras gali būti identifikavimo arba žvalgymo elementas; antrasis yra loginis pasirinktinis parametras, kuriame „true“ yra išjungtas, o „false“ - įvestis. Jei šis parametras yra praleistas, antrasis parametras perjungia pasirinkimą tarp „įjungta“ ir „išjungta“.

 function changeSelectUserManipulation(obj, disable){ var $obj = ( typeof obj === 'string' )? $('#'+obj) : obj; disable = disable? !!disable : !$obj.is(':disabled'); if(disable){ $obj.prop('disabled', true) .after("<input type='hidden' id='select_user_manipulation_hidden_"+$obj.attr('id')+"' name='"+$obj.attr('name')+"' value='"+$obj.val()+"'>"); }else{ $obj.prop('disabled', false) .next("#select_user_manipulation_hidden_"+$obj.attr('id')).remove(); } } changeSelectUserManipulation("select_id"); 
1
24 февр. Atsakymas duotas „ Doglas“ 24 vasaris. 2015-02-24 19:21 '15, 19:21, 2015-02-24 19:21

Aš nulaužiau greitą (tik „jQuery“) įskiepį, kuris išsaugo vertę duomenų lauke, kai įėjimas yra išjungtas. Tai tiesiog reiškia, kad nors laukas automatiškai išjungiamas per jquery naudojant .prop () arba .attr () ..., tada prieigą prie vertės naudodami .val (), Serialize () arba .serializeArra () visada grąžins vertę net jei jis yra išjungtas :)

Nepatogus papildinys: https://github.com/Jezternz/jq-disabled-inputs

1
08 июня '13 в 5:27 2013-06-08 05:27 atsakymą davė Josh Mc birželio 13 d., 15:27 2013-06-08 05:27

Radau veiksmingą sprendimą: pašalinkite visus elementus, išskyrus pasirinktą. Tada galite pakeisti stilių į kažką, kas taip pat atrodo išjungti. Naudojant jQuery:

 jQuery(function($) { $('form').submit(function(){ $('select option:not(:selected)', this).remove(); }); }); 
1
24 дек. Atsakymas, kurį pateikė Alftheo 24 d. 2010-12-24 09:56 '10, 9:56, 2010-12-24 09:56
 <select id="example"> <option value="">please select</option> <option value="0" >one</option> <option value="1">two</option> </select> if (condition){ //you can't select $("#example").find("option").css("display","none"); }else{ //you can select $("#example").find("option").css("display","block"); } 
0
27 дек. Atsakymas, pateiktas Thxopen, gruodžio 27 d. 2016-12-27 11:15 '17 at 11:15 2016-12-27 11:15

Kita galimybė - naudoti tik skaitomą atributą.

 <select readonly="readonly"> .... </select> 

Esant pasirengimui, vertė vis dar siunčiama, įvesties laukas neaktyvus ir vartotojas negali redaguoti.

Redaguoti:

Citata iš http://www.w3.org/TR/html401/interact/forms.html#adef-readonly :

  • Tik skaitymo elementai gauna fokusą, bet vartotojas negali jo keisti.
  • Tik skaitymo elementai yra įtraukti į skirtukų navigaciją.
  • Tik skaitomi elementai gali būti sėkmingi.

Kai jis sako, kad elementas gali būti sėkmingas, tai reiškia, kad jis gali būti pateiktas kaip nurodyta čia: http://www.w3.org/TR/html401/interact/forms.html#successful-controls

-6
17 окт. Atsakymą pateikė Phillip Whelan spalio 17 d. 2009-10-17 01:54 '09 ne 1:54 2009-10-17 01:54

Kiti klausimai dėl etikečių arba Užduoti klausimą