2010-02-11 73 views
21
<form method="get" action=""> 
    <select name="name"> 
     <option value="a">a</option> 
     <option value="b">b</option> 
    </select> 
    <select name="location"> 
     <option value="x">x</option> 
     <option value="y">y</option> 
    </select> 
    <input type="submit" value="Submit" class="submit" /> 
</form> 

Khi gửi biểu mẫu, làm cách nào để đảm bảo rằng các giá trị đã chọn vẫn được chọn trong menu thả xuống? Biểu mẫu này nằm bên trong wordpress (PHP).Giữ giá trị được chọn sau khi gửi biểu mẫu

Trả lời

33

Để tránh nhiều if-else cấu trúc, chúng ta hãy javascript làm các trick tự động:

<select name="name" id="name"> 
    <option value="a">a</option> 
    <option value="b">b</option> 
</select> 

<script type="text/javascript"> 
    document.getElementById('name').value = "<?php echo $_GET['name'];?>"; 
</script> 

<select name="location" id="location"> 
    <option value="x">x</option> 
    <option value="y">y</option> 
</select> 

<script type="text/javascript"> 
    document.getElementById('location').value = "<?php echo $_GET['location'];?>"; 
</script> 
+5

Giải pháp lạ IMO- Giới thiệu javascript để lưu một vài dòng PHP không có ý nghĩa. – Yarin

+0

@Yarin: Đồng ý, một giải pháp nhanh chóng, trong văn phòng vào thời gian đó, không có nhiều thời gian: ( – Sarfraz

+0

giải pháp tuyệt vời nhưng loại sơ sài. Được sử dụng trên LEMP ngăn xếp và tôi không thể tải lại nginx sau khi gỡ lỗi với sudo đuôi/var/log /nginx/error.log các lỗi đã được trực tiếp tại các dòng này và sau khi loại bỏ mã tôi đã có thể tải lại chỉ phạt – d1sciple

19
<select name="name"> 
    <option <?php if ($_GET['name'] == 'a') { ?>selected="true" <?php }; ?>value="a">a</option> 
    <option <?php if ($_GET['name'] == 'b') { ?>selected="true" <?php }; ?>value="b">b</option> 
</select> 
+0

Đó có phải là phương pháp tốt nhất? Có quá nhiều lựa chọn trong mẫu của tôi. – 3zzy

+3

Nếu thẻ 'tùy chọn' đang được tạo trong mã (và nếu chúng không có, thì tại sao không?) Bạn chỉ có thể đặt dấu kiểm trong vòng lặp. –

2

Js chỉ giải pháp:

var tmpParams = decodeURIComponent(window.location.search.substr(1)).split("&"); 
for (var i = 0; i < tmpParams.length; i++) { 
    var tmparr = tmpParams[i].split("="); 
    var tmp = document.getElementsByName(tmparr[0])[0]; 
    if (!!tmp){ 
     document.getElementsByName(tmparr[0])[0].value = tmparr[1]; 
    } 
} 

hoặc nếu bạn đang sử dụng jquery bạn có thể thay

var tmp = document.getElementsByName(tmparr[0])[0]; 
if (!!tmp){ 
    document.getElementsByName(tmparr[0])[0].value = tmparr[1]; 
} 

với:

$('*[name="'+tmparr[0]+'"]').val(tmparr[1]); 
3

Kể từ wordpress đã sử dụng jquery bạn có thể thử một cái gì đó như thế này:

var POST=<?php echo json_encode($_POST); ?>; 
for(k in POST){ 
    $("#"+k).val(POST[k]); 
} 
+0

Có bất kỳ mối quan tâm an ninh với việc sử dụng loại phương pháp này? – rnevius

5

Sau khi thử al này "giải quyết" không có gì làm việc. Đã làm một số nghiên cứu về w3school trước và nhớ có giải thích về việc giữ giá trị về đài phát thanh. Nhưng nó cũng hoạt động cho tùy chọn Select. Xem ở đây một ví dụ. Chỉ cần thử nó ra và chơi với nó.

<?php 
$example = $_POST["example"]; 
?> 
<form method="post">   
<select name="example"> 
    <option <?php if (isset($example) && $example=="a") echo "selected";?>>a</option> 
    <option <?php if (isset($example) && $example=="b") echo "selected";?>>b</option> 
    <option <?php if (isset($example) && $example=="c") echo "selected";?>>c</option> 
</select> 
<input type="submit" name="submit" value="submit" /> 
</form> 
-1
<form method="get" action=""> 
<select name="name" value="<?php echo $_GET['name'];?>"> 
    <option value="a">a</option> 
    <option value="b">b</option> 
</select> 
<select name="location" value="<?php echo $_GET['location'];?>"> 
    <option value="x">x</option> 
    <option value="y">y</option> 
</select> 
    <input type="submit" value="Submit" class="submit" /> 
</form> 
+0

Điều này không Bạn cần đặt thuộc tính 'selected' trên tùy chọn bạn muốn chọn –

3

Nếu bạn đang sử dụng Wordpress (như là trường hợp với OP), bạn có thể sử dụng chức năng selected.

<form method="get" action=""> 
    <select name="name"> 
    <option value="a" <?php selected(isset($_POST['name']) ? $_POST['name'] : '', 'a'); ?>>a</option> 
    <option value="b" <?php selected(isset($_POST['name']) ? $_POST['name'] : '', 'b'); ?>>b</option> 
</select> 
<select name="location"> 
    <option value="x" <?php selected(isset($_POST['location']) ? $_POST['location'] : '', 'x'); ?>>x</option> 
    <option value="y" <?php selected(isset($_POST['location']) ? $_POST['location'] : '', 'y'); ?>>y</option> 
</select> 
<input type="submit" value="Submit" class="submit" /> 
</form> 
+0

Đây có lẽ là câu trả lời hay nhất cho câu hỏi của OP vì chúng đang sử dụng Wordpress. –

0

Điều này phù hợp với tôi!

<label for="reason">Reason:</label> 
<select name="reason" size="1" id="name" > 
    <option value="NG" selected="SELECTED"><?php if (!(strcmp("NG", $_POST["reason"]))) {echo "selected=\"selected\"";} ?>Selection a reason below</option> 
    <option value="General"<?php if (!(strcmp("General", $_POST["reason"]))) {echo "selected=\"selected\"";} ?>>General Question</option> 
    <option value="Account"<?php if (!(strcmp("Account", $_POST["reason"]))) {echo "selected=\"selected\"";} ?>>Account Question</option> 
    <option value="Other"<?php if (!(strcmp("Other", $_POST["reason"]))) {echo "selected=\"selected\"";} ?>>Other</option> 

</select> 
0

Hãy thử giải pháp này cho giữ giá trị được chọn trong danh sách thả xuống:

<form action="<?php echo get_page_link(); ?>" method="post"> 
    <select name="<?php echo $field_key['key']; ?>" onchange="javascript: 
     submit()"> 
    <option value="">All Category</option> 
    <?php 
    foreach($field['choices'] as $key => $value){ 
     if($post_key==$key){ ?> 
      <option value="<?php echo $key; ?>" selected><?php echo $value; ?></option> 
<?php 
    }else{?> 
    <option value="<?php echo $key; ?>"><?php echo $value; ?></option> 
<?php } 
    }?> 
</select> 
</form> 
Các vấn đề liên quan