Come posso aggiungere un & # 8220; Altro & # 8221; inserimento di testo in una serie di pulsanti di opzione in un modulo HTML?

StackOverflow https://stackoverflow.com/questions/1228504

Domanda

Sto provando a creare un modulo con un write-in " altro " opzione come ultimo pulsante di opzione. Ho provato le seguenti varianti senza successo:

<label><input type="radio" name="candidate" value="option1">First Option</label>
<label><input type="radio" name="candidate" value="option2">Second Option</label>
<label><input type="radio" name="candidate" value="other">OTHER</label><input type="text" name="other" value="Write In" />

È possibile avere un pulsante di opzione con un input di testo che passa il suo valore a quel pulsante di opzione al momento dell'invio senza utilizzare JavaScript?

È stato utile?

Soluzione

Se si seleziona 'Altro', si desidera inviare solo il valore nel campo di testo, non ha senso alimentarlo nella radio e passarlo al server. È possibile assegnare al valore della radio "Altro" la stringa vuota, ad esempio:

<label><input type="radio" name="candidate" value="">OTHER</label>

E sul server se non è presente alcun valore in " candidato " guarda " altro " ;.

Altri suggerimenti

No: non è supportato dalle specifiche HTML. Dovresti farlo tramite javascript prima di inviare il modulo o, meglio ancora, controllare se il pulsante di opzione è impostato su " altro " e quindi leggi il valore della casella di testo DOPO che il modulo è stato inviato.

Uno dei motivi per cui non vuoi davvero fare casino con l'alterazione del valore di ritorno dell '"altro" il pulsante di opzione è cosa succede se dovessi digitare " opzione1 " nella tua casella di testo?

Non credo che le specifiche HTML lo supportino, no. Dovresti solo vedere il tuo codice di elaborazione guardare il pulsante di opzione, vedere che il valore è "altro" e ottenere un valore dall'input del campo di testo (la "altra" var nell'invio del modulo anziché il "candidato 'var).

No. Ciò richiede aggiornamenti dinamici del DOM, che richiede JavaScript.

Questo è il modo più semplice che posso vedere, per favore correggimi se sbaglio!

<form name="fruitForm" method="post" action="other-post.php">
<label><input type="radio" name="fruit" value="apple" onClick="regularFruit()">apple</input></label>
<label><input type="radio" name="fruit" value="orange" onClick="regularFruit()">orange</input></label>
<label><input type="radio" name="fruit" value="lemon" onClick="regularFruit()">lemon</input></label>
<label onClick="otherFruit()">
    <input type="radio" name="fruit" id="other_fruit" value="other" >or other fruit:</input>
    <input type ="text" name="other" id="other_text"/></label>
    <input type="submit" value="Submit">
</form>

<script>
function otherFruit(){
a=document.getElementById('other_fruit');
a.checked=true;
}
function regularFruit(){
a=document.getElementById('other_text');
a.value="";
}
</script>

Laddove l'etichetta incorpori la radio e il campo di testo, il campo di testo controlla " altro " radio e invia il valore di " altro " come ciò che viene immesso nel campo. Quindi il controllo di un pulsante di opzione cancella nuovamente il campo di testo

Ecco cosa ho fatto (esegui lo snippet per vedere cosa fa). Spero che tu possa curiosare e capire come funziona.

Quando si elabora il modulo, è possibile verificare i valori dal fatto che o è selezionato un pulsante di opzione o la casella di testo avrà un valore.

$(document).ready(
  function() {
    $('input[name=amount]').on('click', function() {
      var customText = $('input[name=custom-amount]');
      customText.val('');
      customText.parent().removeClass("selected");
    });

    $('input[name=custom-amount]').on('click', function() {
      $('input[name=amount]').attr('checked', false);
      $(this).parent().addClass("selected");
    });
  });
.donate {
  font-family: sans-serif;
}
.donate .payee {
  color: #4B8EBC;
  font-weight: bold;
}
.donate .custom-amount {
  width: 150px;
  height: 40px;
  background-color: #7DB6DA;
  color: #325F7F;
  font-weight: bold;
  font-size: 1rem;
  padding: 2px;
  padding-left: 6px;
}
.donate .custom-amount input {
  font-weight: lighter;
  font-size: 0.8rem;
  background-color: white;
  width: 116px;
  height: 24px;
  margin-top: 4px;
  margin-left: 6px;
}
.donate .radio-control {
  position: relative;
  display: inline-block;
  font-size: 1rem;
  width: 50px;
  height: 40px;
  cursor: pointer;
  z-index: 12;
}
.donate .radio-control input[type="radio"] {
  position: absolute;
  z-index: -1;
  opacity: 0;
}
.donate .radio-control__indicator {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 10;
  text-align: center;
  line-height: 40px;
}
.donate .radio-control__indicator, .donate .custom-amount {
  background-color: #7DB6DA;
  color: #325F7F;
}
.donate .radio-control:hover input ~ .radio-control__indicator,
.donate .radio-control input:focus ~ .radio-control__indicator {
  opacity: 0.9;
}
.donate .radio-control input:checked ~ .radio-control__indicator,
.donate .custom-amount.selected {
  background: #4B8EBC;
  color: white;
}
.donate .radio-control:hover input:not([disabled]):checked ~ .radio-control__indicator,
.donate .radio-control input:checked:focus ~ .radio-control__indicator {
  opacity: 1;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form class="donate">
  <div class="row amount">
    <div class="control-group">
      <label class="radio-control">
        <input checked="checked" name="amount" type="radio" value="$5" />
        <div class="radio-control__indicator">
          $5
        </div>
      </label>
      <label class="radio-control">
        <input name="amount" type="radio" value="$10" />
        <div class="radio-control__indicator">
          $10
        </div>
      </label>
      <label class="radio-control">
        <input name="amount" type="radio" value="$20" />
        <div class="radio-control__indicator">
          $20
        </div>
      </label>
      <label class="radio-control">
        <input name="amount" type="radio" value="$50" />
        <div class="radio-control__indicator">
          $50
        </div>
      </label>
      <div class="custom-amount">
        $
        <input class="custom-amount" name="custom-amount" placeholder="Custom amount" size="40" />
      </div>
    </div>
  </div>
</form>

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top