2013-08-27 57 views
11

Thuộc tính danh sách/yếu tố dữ liệu của biểu mẫu HTML5 hiển thị trình đơn thả xuống của các lựa chọn mà người dùng có thể chọn, chỉnh sửa và thậm chí nhập một số văn bản. Tất cả điều này có thể đạt được cùng một lúc với một mã sạch và mạnh mẽ:Nhà dữ liệu HTML5 có thể phân biệt giá trị và văn bản tùy chọn không?

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

Tuy nhiên, làm thế nào để thực hiện một hình thức như gửi một giá trị mà là khác nhau từ các văn bản tùy chọn, như trong chọn/tùy chọn thông thường (dưới đây) ?

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

Tôi nghĩ rằng bạn không thể làm điều này với chỉ có một đầu vào. Nó có thể đạt được với một đầu vào cho văn bản được hiển thị và văn bản thứ hai, được ẩn chứa ID. Điều đó, cộng với một số kịch bản để đồng bộ hóa chúng. – SWilk

+2

có thể trùng lặp của [Hiển thị nhãn dữ liệu nhưng gửi giá trị thực tế] (http://stackoverflow.com/questions/29882361/show-datalist-labels-but-submit-the-actual-value) –

Trả lời

4

Dường như bạn không thể với HTML thuần túy mà không cần trợ giúp JS + CSS.

hãy thử điều này tôi hy vọng nó giúp bạn.

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> 

kịch bản

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

nhất Wishes Kumar

+2

Bạn đã sử dụng rõ ràng một số thư viện ở đây, vì vậy hãy nêu rõ cái nào. Ngoài ra, @Alex hỏi cách làm cho biểu mẫu gửi số nhận dạng của giá trị danh sách đã chọn. Vì vậy, tôi nghĩ rằng kịch bản của bạn nên sửa đổi phần tử, hoặc thêm phần tử ẩn có chứa id. – SWilk

+0

có quyền của bạn tôi có thể thêm phần tử ẩn bài chỉ chứa id. công việc của nó như tùy chọn chọn thông thường. –

+3

Kumar, có vẻ như tín dụng cho @infocyde phải ở trong ghi chú của bạn ở đâu đó khi giải pháp của bạn trông giống như một cắt và dán câu trả lời của mình ở đây: http://stackoverflow.com/questions/14532398/html5-datalist-value-vs-inner -text? rq = 1 – globalSchmidt

1

Dưới đây là câu trả lời được sửa đổi Kumah rằng sử dụng một lĩnh vực ẩn chứa những giá trị mà cuối cùng được gửi đến máy chủ.

$('#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(); 
}