Làm cách nào tôi có thể đặt giá trị mặc định cho phần tử <select> HTML?


1458

Tôi nghĩ rằng việc thêm một "value"thuộc tính được đặt trên thành <select>phần bên dưới sẽ khiến mặc định <option>chứa thuộc tính được cung cấp của tôi "value"được chọn:

<select name="hall" id="hall" value="3">
  <option>1</option>
  <option>2</option>
  <option>3</option>
  <option>4</option>
  <option>5</option>
</select>

Tuy nhiên, điều này đã không làm việc như tôi mong đợi. Làm cách nào để đặt <option>phần tử được chọn theo mặc định?


Ồ, câu hỏi này rất hữu ích và nó thực sự đã lan truyền haha
finnmecraft

Câu trả lời:


2151

Đặt selected="selected"cho tùy chọn bạn muốn làm mặc định.

<option selected="selected">
3
</option>

19
<tùy chọn giá trị = "3" đã chọn = "đã chọn"> 3 </ tùy chọn> Giá trị sẽ được chuyển qua dưới dạng chuỗi khi tùy chọn 3 được chọn.
Sree Rama

5
Và tiếp tục sử dụng thuộc tính id cho <Chọn> và sử dụng thuộc tính giá trị cho phần tử html <select> là không tốt.
Sree Rama

216
Phần = "được chọn" là không cần thiết. Chỉ cần <tùy chọn được chọn> sẽ làm như được đề cập trong các câu trả lời khác.
MindJuice

56
@MindJuice Những gì tôi đã viết là HTML / XML polyglot hợp lệ. Sử dụng <tùy chọn đã chọn> là ổn đối với trình duyệt, nhưng có thể khiến tài liệu bị từ chối bởi các trình phân tích cú pháp khác. Tôi thấy tiện dụng khi thỉnh thoảng có thể sử dụng XPath / XSLT trên các tài liệu web.
Borealid

70
Nếu bạn đang sử dụng Angular, lưu ý rằng ng-modelghi đè giá trị được chọn mặc định (ngay cả khi không xác định nếu bạn không đặt đối tượng bị ràng buộc). Mất một lúc tôi mới hiểu đó là lý do tại sao selected="selected"tùy chọn không được chọn.
metakermit

626

Trong trường hợp bạn muốn có một văn bản mặc định là một loại giữ chỗ / gợi ý nhưng không được coi là một giá trị hợp lệ (một cái gì đó như "hoàn thành ở đây", "chọn quốc gia của bạn" ecc.), Bạn có thể làm một cái gì đó như thế này:

<select>
  <option value="" selected disabled hidden>Choose here</option>
  <option value="1">One</option>
  <option value="2">Two</option>
  <option value="3">Three</option>
  <option value="4">Four</option>
  <option value="5">Five</option>
</select>


60
Tôi sẽ nghĩ rằng đây là những gì hầu hết mọi người đang tìm kiếm. Câu trả lời tốt.
chrisallick

1
Đó là một jsfiddle bên ngoài, nơi css chỉ cần thiết để không xuất hiện dọc theo viền màn hình. Sau một vài tháng, nó đã được chỉnh sửa thành một đoạn mã nội tuyến và anh chàng đã chỉnh sửa chỉ giữ nó trong ví dụ. Bạn có thể chỉnh sửa và xóa nó khỏi đoạn trích nếu nó thực sự làm phiền bạn.
Nobita

Một giải pháp thậm chí tốt hơn là sử dụng hiddenthuộc tính thay thế. Xem câu trả lời của @ chong-lip-phang bên dưới: stackoverflow.com/a/39358987/1192426
Ivan Akulov

<option value="" selected disabled hidden>Choose here</option>

1
Câu trả lời tuyệt vời!
japes Sophey

234

Ví dụ hoàn chỉnh:

<select name="hall" id="hall"> 
  <option> 
    1 
  </option> 
  <option> 
    2 
  </option> 
  <option selected> 
    3 
  </option> 
  <option> 
    4 
  </option> 
  <option> 
    5 
  </option> 
</select> 


11
Điều đó đơn giản hơn việc sử dụng đã chọn = "đã chọn".
Rodrigo

57
đã chọn = "đã chọn" sẽ hoạt động cho tất cả các loại tài liệu. XHTML không thích các thuộc tính không có giá trị.
ps2goat

14
@Rodrigo Có thực sự khó viết selected="selected"không? Ý tôi là, bạn đang tiết kiệm cái gì? Thời gian? Kích thước? Nó không đáng kể và nếu nó làm cho mã "tuân thủ" hơn, tại sao không làm điều đó ?
xDaizu

15
@ DanielParejoMuñoz, ok, không đáng kể. Nhưng nếu doctype của tôi là html chứ không phải xhtml, tại sao lại lãng phí bất kỳ byte nào?
Rodrigo

5
đã chọn = "đã chọn" trông giống như một lỗi. Trong một vài tháng, tôi có thể thay đổi nó thành đã chọn = "3" với suy nghĩ rằng điều này có nghĩa là mục 3 đã được chọn. (và phá vỡ trang của tôi)
Paul McCarthy

92

Tôi đã gặp câu hỏi này, nhưng câu trả lời được chấp nhận và đánh giá cao đã không làm việc cho tôi. Hóa ra nếu bạn đang sử dụng React, thì cài đặt selectedkhông hoạt động.

Thay vào đó, bạn phải đặt một giá trị trong <select>thẻ trực tiếp như hiển thị bên dưới:

<select value="B">
  <option value="A">Apple</option>
  <option value="B">Banana</option>
  <option value="C">Cranberry</option>
</select>

Đọc thêm về lý do tại sao ở đây trên trang React .


2
Bạn có thể đặt tùy chọn được chọn trước trong danh sách thả xuống bằng cách sử dụng valuethuộc tính cho <select>thẻ, nghĩa là <select value="3">, nhưng nó không hợp lệ trong trình xác nhận W3C.
Sứ đồ

4
Đúng, nhưng đây không phải là HTML, đó là JSX, vì vậy nó không cần phải tuân theo các quy tắc W3C. Mặc dù vậy, HTML được tạo bởi React là hợp lệ.
MindJuice

Trong một thế giới hoàn hảo, đây là một nhận xét cho câu hỏi, vì nó không phải là một câu trả lời hợp lệ. Nhưng tôi đoán nó có đủ giá trị để bám xung quanh.
Justus Romijn

2
Tôi cần một giải pháp tương tự với đề xuất trên, nhưng với JQuery thay vì React. Trong trường hợp nó giúp được bất cứ ai trong tương lai:$("select").each(function(){ $(this).find('option[value="'+$(this).attr("value")+'"]').prop('selected', true); });
CDK

Câu trả lời này không hợp lệ, câu hỏi cơ bản là nói về HTML chứ không phải React (JSX).
Aaron C

72

Bạn có thể làm như thế này:

<select name="hall" id="hall">
    <option> 1 </option>
    <option> 2 </option>
    <option selected> 3 </option>
    <option> 4 </option>
    <option> 5 </option>
</select> 

Cung cấp từ khóa "đã chọn" bên trong thẻ tùy chọn mà bạn muốn xuất hiện theo mặc định trong danh sách thả xuống của bạn.

Hoặc bạn cũng có thể cung cấp thuộc tính cho thẻ tùy chọn tức là

<option selected="selected">3</option>

13
Nói

40
@JRM Tôi nghĩ điều bạn muốn nói là nếu tài liệu của bạn tuân thủ XHTML hơn một thuộc tính phải có giá trị aa. Trong HTML, không cần "chọn = đã chọn". Các ví dụ trên w3.org/wiki/HTML/Elements/select , developer.mozilla.org/en-US/docs/HTML/Euity/select không chỉ định giá trị. Điều quan trọng cần lưu ý selected="false"là không được phép và selected=""cũng làm cho nó được chọn. Cách duy nhất để thực hiện một tùy chọn không được chọn là xóa thuộc tính. w3.org/html/wg/dcraft/html/master/ từ
Juan Mendes

3
Tôi không bao giờ hiểu làm thế nào các câu hỏi như thế này bao giờ được nêu lên. Họ chính xác như câu trả lời đúng chưa .. 2 năm sau lol
Phil

51

nếu bạn muốn sử dụng các giá trị từ Biểu mẫu và giữ cho nó động, hãy thử điều này với php

<form action="../<SamePage>/" method="post">


<?php
    $selected = $_POST['select'];
?>

<select name="select" size="1">

  <option <?php if($selected == '1'){echo("selected");}?>>1</option>
  <option <?php if($selected == '2'){echo("selected");}?>>2</option>

</select>
</form>

40

Tôi thích điều này:

<select>
   <option selected hidden>Choose here</option>
   <option value="1">One</option>
   <option value="2">Two</option>
   <option value="3">Three</option>
   <option value="4">Four</option>
   <option value="5">Five</option>
</select>

'Chọn ở đây' biến mất sau khi một tùy chọn đã được chọn.


1
Tôi đã thử điều này nhưng "Chọn ở đây" không hiển thị. Tùy chọn đầu tiên trống rỗng
Bogdan Mates

Bạn đang dùng trình duyệt nào?
Chong Lip Phang

Tôi đang sử dụng trình duyệt Google Chrome phiên bản 52.0.2743.116 m
Bogdan Mates

2
Tôi cũng đang sử dụng trình duyệt đó và không gặp vấn đề gì.
Chong Lip Phang

2
Xem xét thêm value=""để đảm bảo bạn nhận được một giá trị trống.
Ryan Walton

31

Một cải tiến cho câu trả lời của nobita . Ngoài ra, bạn có thể cải thiện chế độ xem trực quan của danh sách thả xuống, bằng cách ẩn phần tử 'Chọn tại đây'.

<select>
  <option selected disabled hidden>Choose here</option>
  <option value="1">One</option>
  <option value="2">Two</option>
  <option value="3">Three</option>
  <option value="4">Four</option>
  <option value="5">Five</option>
</select>


25

Cách tốt nhất theo ý kiến ​​của tôi:

<select>
   <option value="" selected="selected" hidden="hidden">Choose here</option>
   <option value="1">One</option>
   <option value="2">Two</option>
   <option value="3">Three</option>
   <option value="4">Four</option>
   <option value="5">Five</option>
</select>

Tại sao không bị tàn tật?

Khi bạn sử dụng thuộc tính bị vô hiệu hóa cùng với <button type="reset">Reset</button>giá trị sẽ không được đặt lại về chỗ giữ gốc. Thay vào đó, trình duyệt chọn tùy chọn không bị vô hiệu hóa đầu tiên có thể gây ra lỗi người dùng.

Giá trị trống mặc định

Mọi hình thức sản xuất đều có xác nhận, sau đó giá trị trống không phải là một vấn đề. Bằng cách này, chúng tôi có thể có trống không yêu cầu chọn.

Thuộc tính cú pháp XHTML

selected="selected"cú pháp là cách duy nhất để tương thích với cả XHTML và HTML 5. Đây là cú pháp XML chính xác và một số biên tập viên có thể hài lòng về điều này. Nó tương thích ngược hơn. Tôi không có cảm giác mạnh về điều này, nhưng nếu các đối số được đề cập ở trên là yêu cầu của bạn, bạn nên tuân theo cú pháp đầy đủ.


Điều đó che giấu toàn bộ tùy chọn cho tôi
ADEL NAMani

@ADELNAMANI Bạn có thể cung cấp liên kết đến mã của bạn? Tôi đoán vấn đề của bạn không liên quan đến câu trả lời của tôi.
Michał Mielec

19

Một vi dụ khac; sử dụng JavaScript để đặt tùy chọn đã chọn.

(Bạn có thể sử dụng ví dụ này để lặp một mảng các giá trị thành một thành phần thả xuống)

<select id="yourDropDownElementId"><select/>

// Get the select element
var select = document.getElementById("yourDropDownElementId");
// Create a new option element
var el = document.createElement("option");
// Add our value to the option
el.textContent = "Example Value";
el.value = "Example Value";
// Set the option to selected
el.selected = true;
// Add the new option element to the select element
select.appendChild(el);

không nên el.selected = "selected";tuân thủ tiêu chuẩn w3?
7yl4r

5
@ 7yl4r số selectedlà một tài sản boolean theo quy định của w3c - w3.org/TR/html401/interact/forms.html 'tùy chọn 17.6.1 Pre-chọn chọn [CI] - Khi thiết lập, điều này quy định cụ thể thuộc tính boolean rằng tùy chọn này được trước selected.` Để biết thêm thông tin về trường w3c sử dụng see - w3schools.com/jsref/prop_option_selected.asp
Ally

14

Các chọn thuộc tính là một thuộc tính boolean.

Khi có mặt, nó chỉ định rằng một tùy chọn nên được chọn trước khi tải trang.

Tùy chọn được chọn trước sẽ được hiển thị đầu tiên trong danh sách thả xuống.

<select>
  <option value="volvo">Volvo</option>
 <option value="saab">Saab</option>
 <option value="vw">VW</option>
 <option value="audi" selected>Audi</option> 
</select> 

10

Nếu bạn đang phản ứng, bạn có thể sử dụng defaultValuelàm thuộc tính thay vì valuetrong thẻ chọn.


7

Nếu bạn đang sử dụng select với angular 1, thì bạn cần sử dụng ng-init, nếu không, tùy chọn thứ hai sẽ không được chọn vì mô hình ng sẽ ghi đè giá trị được chọn mặc định

<select ng-model="sortVar" ng-init='sortVar="stargazers_count"'>
  <option value="name">Name</option>
  <option selected="selected" value="stargazers_count">Stars</option>
  <option value="language">Language</option>
</select>

4

Tôi đã sử dụng hàm php này để tạo các tùy chọn và chèn nó vào HTML của mình

<?php
  # code to output a set of options for a numeric drop down list
  # parameters: (start, end, step, format, default)
  function numericoptions($start, $end, $step, $formatstring, $default)
  {
    $retstring = "";
    for($i = $start; $i <= $end; $i = $i + $step)
    {
      $retstring = $retstring . '<OPTION ';
      $retstring = $retstring . 'value="' . sprintf($formatstring,$i) . '"';
      if($default == $i)
      {
        $retstring = $retstring . ' selected="selected"';
      }
      $retstring = $retstring . '>' . sprintf($formatstring,$i) . '</OPTION> ';
    }

  return $retstring;
  }

?>

Và sau đó trong mã trang web của tôi, tôi sử dụng nó như dưới đây;

<select id="endmin" name="endmin">
  <?php echo numericoptions(0,55,5,'%02d',$endmin); ?>
</select>

Nếu $ endmin được tạo từ biến _POST mỗi khi trang được tải (và mã này nằm trong một biểu mẫu có bài đăng) thì giá trị được chọn trước đó được chọn theo mặc định.


4

thuộc tính giá trị của thẻ bị thiếu, vì vậy nó không hiển thị như bạn muốn chọn. Theo mặc định, tùy chọn đầu tiên hiển thị khi tải trang thả xuống, nếu thuộc tính value được đặt trên thẻ .... Tôi đã giải quyết vấn đề của mình theo cách này


4

Mã này đặt giá trị mặc định cho phần tử chọn HTML bằng PHP.

<select name="hall" id="hall">
<?php
    $default = 3;
    $nr = 1;
    while($nr < 10){
        if($nr == $default){
            echo "<option selected=\"selected\">". $nr ."</option>";
        }
        else{
            echo "<option>". $nr ."</option>";
        }
        $nr++;
    }
?>
</select>

3

Bạn có thể dùng:

<option value="someValue" selected>Some Value</option>

thay vì,

<option value="someValue" selected = "selected">Some Value</option>

cả hai đều đúng


3

Tôi chỉ đơn giản là làm cho giá trị tùy chọn chọn đầu tiên trở thành mặc định và chỉ ẩn giá trị đó trong danh sách thả xuống với tính năng "ẩn" mới của HTML5. Như thế này:

   <select name="" id="">
     <option hidden value="default">Select An Option</option>
     <option value="1">One</option>
     <option value="2">Two</option>
     <option value="3">Three</option>
     <option value="4">Four</option>
   </select>

2

Bản thân tôi sử dụng nó

<select selected=''>
    <option value=''></option>
    <option value='1'>ccc</option>
    <option value='2'>xxx</option>
    <option value='3'>zzz</option>
    <option value='4'>aaa</option>
    <option value='5'>qqq</option>
    <option value='6'>wwww</option>
</select>

2

Bạn chỉ cần đặt thuộc tính "được chọn" trên một tùy chọn cụ thể thay vì trực tiếp để chọn thành phần.

Đây là đoạn trích cho cùng và nhiều ví dụ làm việc với các giá trị khác nhau.

   Select Option 3 :- 
   <select name="hall" id="hall">
    <option>1</option>
    <option>2</option>
    <option selected="selected">3</option>
    <option>4</option>
    <option>5</option>
   </select>
   
   <br/>
   <br/>
   <br/>
   Select Option 5 :- 
   <select name="hall" id="hall">
    <option>1</option>
    <option>2</option>
    <option>3</option>
    <option>4</option>
    <option selected="selected">5</option>
   </select>
   
    <br/>
   <br/>
   <br/>
   Select Option 2 :- 
   <select name="hall" id="hall">
    <option>1</option>
    <option selected="selected">2</option>
    <option>3</option>
    <option>4</option>
    <option>5</option>
   </select>


2

Đặt đã chọn = "đã chọn" trong đó giá trị tùy chọn là 3

vui lòng xem ví dụ dưới đây

<option selected="selected" value="3" >3</option>

Trên Firefox, nó sẽ không hoạt động khi tải lại trang
Sebastian

trên hệ thống của tôi, nó hoạt động trên firefox
Akbor

1

Vấn đề <select>là, đôi khi nó bị ngắt kết nối với trạng thái của những gì hiện được hiển thị và trừ khi có gì đó thay đổi trong danh sách tùy chọn, không có giá trị thay đổi nào được trả về. Đây có thể là một vấn đề khi cố gắng chọn tùy chọn đầu tiên từ danh sách. Đoạn mã sau có thể nhận tùy chọn đầu tiên được chọn lần đầu tiên, nhưng onchange="changeFontSize(this)"bản thân nó thì không. Có các phương pháp được mô tả ở trên bằng cách sử dụng tùy chọn giả để buộc người dùng thực hiện giá trị thay đổi để lấy giá trị đầu tiên thực tế, chẳng hạn như bắt đầu danh sách với giá trị trống. Lưu ý: onclick sẽ gọi hàm hai lần, đoạn mã sau thì không, nhưng giải quyết vấn đề lần đầu tiên.

<label>Font Size</label>
<select name="fontSize" id="fontSize" onfocus="changeFontSize(this)" onchange="changeFontSize(this)">           
    <option value="small">Small</option>
    <option value="medium">Medium</option>
    <option value="large">Large</option>
    <option value="extraLarge">Extra large</option>
</select>

<script>
function changeFontSize(x){
    body=document.getElementById('body');
    if (x.value=="extraLarge") {
        body.style.fontSize="25px";
    } else {
        body.style.fontSize=x.value;
    }
}
</script>

1

Tôi sử dụng Angular và tôi đặt tùy chọn mặc định

Mẫu HTML

<select #selectConnection [(ngModel)]="selectedVal" class="form-control  col-sm-6 "  max-width="100px"   title="Select" 
      data-size="10"> 
        <option  >test1</option>
        <option >test2</option>      
      </select>

Kịch bản:

sselectedVal:any="test1";

0

Đây là cách tôi đã làm nó ...

<form action="../<SamePage>/" method="post">

<?php
    if ( $_POST['drop_down'] == "")
    {
    $selected = "";
    }
    else
    {
    $selected = "selected";
    }
?>

<select name="select" size="1">

  <option value="1" <?php $selected ?>>One</option>
     ////////  OR  ////////
  <option value="2" $selected>Two</option>

</select>
</form>

4
Dường như có một số điểm không phù hợp với giải pháp này. Nếu tên của phần tử là "select", không nên khóa biến $ _POST là "select" - "drop_down" đến từ đâu? Ngoài ra, giả sử đó là một lỗi và điều này thực sự đang kiểm tra biến $ _POST ['select'] cho một giá trị, mọi giá trị không trống sẽ trả về giá trị đúng và do đó tất cả các mục <tùy chọn> sẽ được đánh dấu "đã chọn". Có lẽ tôi đang thiếu một cái gì đó không thể thiếu cho câu trả lời này?
Ryan

0

Bạn có thể thử như thế này

  <select name="hall" id="hall">
      <option>1</option>
      <option>2</option>
      <option selected="selected">3</option>
      <option>4</option>
      <option>5</option>
    </select>

0

Đoạn mã HTML:

<select data-selected="public" class="form-control" name="role">
    <option value="public">
        Pubblica
    </option>
    <option value="user">
        Utenti
    </option>
    <option value="admin">
        Admin
    </option>
</select>

Đoạn mã JavaScript gốc:

document.querySelectorAll('[data-selected]').forEach(e => {
   e.value = e.dataset.selected
});

0
Upstream System:
<select name=upstream id=upstream>
<option value="SYBASE">SYBASE ASE
<option value="SYBASE_IQ">SYBASE_IQ
<option value="SQLSERVER">SQLSERVER
</select>
<script>
var obj=document.getElementById("upstream");
for (var i=0;i<obj.length;i++){if(obj.options[i].value==="SYBASE_IQ")obj.selectedIndex=i;}
</script>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.