2013-08-27 10 views
11

Element listy/datalist w formularzach HTML5 pokazuje rozwijane menu wyborów, z których można wybierać, edytować, a nawet wpisywać tekst. Wszystko to można osiągnąć od razu z czystym i potężnym kodu:Czy dane HTML5 mogą różnicować wartość i tekst opcji?

<input list="states"> 
<datalist id="states"> 
    <option value="One"> 
    <option value="Two"> 
</datalist> 

Jednakże, jak zrobić taki formularz wysłać wartość, która różni się od tekstu opcji, jak w zwykłym Select/opcji (poniżej) ?

<select> 
    <option value="1">One</option> 
    <option value="2">Two</option> 
</select> 
+0

Myślę, że nie można tego zrobić z tylko jednym wejściem. Można go uzyskać za pomocą jednego wejścia dla wyświetlanego tekstu, a drugiego ukrytego, który zawierałby identyfikatory. To plus trochę skryptu do synchronizacji. – SWilk

+2

możliwy duplikat [Pokaż etykiety datalika ale prześlij aktualną wartość] (http://stackoverflow.com/questions/29882361/show-datalist-labels-but-submit-the-actual-value) –

Odpowiedz

4

Wygląda na to, że nie można z czystym HTMLem bez korzystania z jakiejś pomocy JS + CSS.

spróbuj tego, mam nadzieję, że ci pomoże.

html

<input id="datalisttestinput" list="stuff" ></input> 
     <datalist id="stuff"> 
      <option id="3" value="Collin" > 
      <option id="5" value="Carl"> 
      <option id="1" value="Amy" > 
      <option id="2" value="Kristal"> 
     </datalist> 

skrypt

function GetValue() { 
      var x = $('#datalisttestinput').val(); 
      var z = $('#stuff'); 
      var val = $(z).find('option[value="' + x + '"]'); 
      var endval = val.attr('id'); 
      alert(endval); 
     } 

Najlepsze życzenia Kumar

+2

Użyłeś pewnej biblioteki tutaj, więc proszę podać, który z nich. Ponadto @Alex zapytał, jak utworzyć formularz, wysyłając identyfikator wybranej wartości listy. Myślę więc, że twój skrypt powinien zmodyfikować element lub dodać ukryty element, który będzie zawierał identyfikator. – SWilk

+0

tak, twoja prawica mógłbym dodać ukryty element post zawierający tylko identyfikator. jego praca jak zwykle wybierz opcję. –

+3

Kumar, wygląda na to, że @infocyde powinno znaleźć się gdzieś w twoich notatkach, ponieważ twoje rozwiązanie wygląda jak wycięcie i wklejenie jego odpowiedzi tutaj: http://stackoverflow.com/questions/14532398/html5-datalist-value-vs-inner -text? rq = 1 – globalSchmidt

1

Poniżej jest zmodyfikowana odpowiedź Kumah że wykorzystuje ukryte pole zawiera wartość, która ostatecznie zostaje wysłany do serwera.

$('#inputStates').change(function(){ 
    var c = $('#inputStates').val(); 
    $('#inputStates').val(getTextValue()); 
    $('#statesHidden').val(c); 
}); 

function getTextValue(){ 
    var val = $('#inputStates').val(); 
    var states = $('#states'); 
    var endVal = $(states).find('option[value="' + val + '"]'); 
    //depending on your logic, if endVal is empty it means the value wasn't found in the datalist, you can take some action here 
    return endVal.text(); 
}