2013-08-27 11 views
11

HTML5フォームのlist属性/ datalist要素は、テキストから選択したり、編集したり、入力することができる選択肢のドロップダウンメニューを表示します。このすべてがクリーンでパワフルなコードを一度に実現することができます。HTML5データリストは値とオプションのテキストを区別できますか?

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

しかし、このような形状は、(下)通常の選択/オプションのように、オプションのテキストと異なる値を送信するようにする方法?

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

私はあなたが一つだけの入力でこれを行うことはできないと思います。表示されたテキストは1つの入力で、IDを含む隠しは2番目の入力で実現できます。それに、それらを同期させるスクリプトもあります。 – SWilk

+2

[データリストのラベルを表示するが、実際の値を送信する]の複製が可能です(http://stackoverflow.com/questions/29882361/show-datalist-labels-but-submit-the-actual-value) –

答えて

4

JS + CSSヘルプを使用せずに純粋なHTMLでできないようです。

お試しください。

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> 

スクリプト

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

ベストウイッシュ クマール

以下
+2

あなたは明らかにいくつかのライブラリを使用していますここでは、どちらか一つを明記してください。また、@Alexは、選択したリスト値のフォーム送信識別子の作成方法を尋ねました。だから私はあなたのスクリプトは、要素を変更するか、IDを含む隠し要素を追加する必要がありますと思う。 – SWilk

+0

はいあなたの権利私は隠された要素を追加することができます。通常の選択オプションのような仕事。 –

+3

クマールは、あなたの解答がカットアンドペーストのように見えるので、あなたのノートのどこに@infocydeのクレジットのように見えるでしょう:http://stackoverflow.com/questions/14532398/html5-datalist-value-vs-inner -text?rq = 1 – globalSchmidt

1

は、最終的にサーバーに送信されます値を含むように隠しフィールドを使用していますKumahの修正答えです。

$('#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(); 
} 
関連する問題