重新加载时保留 select 列表
Keep select list on reload
我有一个 select 列表,但是在页面重新加载时,列表中的数据没有被保存。
我已经通过从 $_GET 读取变量来使用 TextBoxes 和 Radio 按钮解决了这个问题。
这是我现在的表格示例:
<form action="" id="exampleForm" method="get">
<input type="checkbox" name="exampleCheckbox" <?php if (isset($_GET['exampleCheckboxStatus'])) {echo "checked";} ?>>Check this
</br>
<select name="exampleList" multiple>
<option>Apple</option>
<option>Banana</option>
<option>Cherry</option>
</select>
<input type="submit" value="Submit" id="submitButton"> </form>
我想在提交后保留 'exampleList' 的值
(我保持在同一页面上)
我在这里看到的帖子几乎和我问的差不多,但他们中的大多数都想使用 javascript。是否有解决我的问题的方法,看起来与我现在已经拥有的类似?我想用 php 解决这个问题,因为我认为我对 Javascript 的了解还不够(还)
使用FormRepo,一个专门用来保留表单数据的插件
在页面刷新。
它的用法也很简单:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script src="FormRepo.js"></script>
<script>
var $form = $('#input')
, $output = $('#output')
, repo = new FormRepo('restclient')
;
// get the last submitted values back
repo.restore($form/*, $form.attr('id')*/ ); // don't necessarily need an identifier
$form.submit(function (e) {
// preserve the last submitted values
repo.preserve($form/*, $form.attr('id')*/ ); // don't necessarily need an identifier
});
console.log( repo.all() );
</script>
您可以使用会话来完成。这是使用它可以在会话中存储最后选择的值的方式。即使重新加载paga,Session值也不会被破坏。
例如,
<?php
session_start(); // Other Code
<div>
<p>Subtitle needs to be
<input type="radio" name="subTitleRadio" <?php if ($_SESSION['subTitleRadio'] != "LIKE") echo "checked"; ?> value="LIKE">contain
<input type="radio" name="subTitleRadio" <?php if ($_SESSION['subTitleRadio'] == "=") echo "checked"; ?> value="=">be equal to
</p>
<input type="search" name="subTitleSearchBox" placeholder="filter for subtitle" class="chosenStyle" value="<?php echo $_GET['subTitleSearchBox'];?>">
</div> //Other Code
?>
PHP提交后会话中设置值的代码:
<?php
session_start(); //Not required if your form action is on same page, else required //Rest code
$_SESSION['subTitleRadio'] = $_GET['subTitleRadio'] // OR $_POST['subTitleRadio']; // Rest code
?>
同样的代码对我有用。
首先是选项的值参数,然后您可以检查 exampleList 是否具有正确的值并使用它。例如:
<option value="apple" <?php if (isset($_GET['exampleList']) && $_GET['exampleList'] == "apple") echo "selected=\"selected\""; ?>>Apple</option>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script>
$(document).ready(function(){
var opts = localStorage.getItem('opts'); // get selected items from localStorage key
opts = opts.split(','); // split result from localstorage to array
$('#exampleList').val(opts); // select options with array
});
</script>
<html>
<body>
<select id="exampleList" multiple>
<option value="apple">Apple</option>
<option value="banana">Banana</option>
<option value="cherry">Cherry</option>
</select>
</body>
</html>
当您POST表单时,您只需将选定的选项值以逗号分隔写入本地存储。
好吧,你可以按照这些思路尝试一些东西。它有点长,你可以缩短它很多。通过这种方式展示,我希望它更容易理解。
<form action="" id="exampleForm" method="get">
<?php
if (isset($_GET['exampleCheckboxStatus'])) {
echo '<input type="checkbox" name="exampleCheckbox" checked> Check this';
} else {
echo '<input type="checkbox" name="exampleCheckbox"> Check this';
?>
<br />
<select name="exampleList[]" multiple>
<?php
if( in_array('apple', $_GET['exampleList']) ) {
echo '<option value="apple" selected>Apple</option>';
} else {
echo '<option value="apple">Apple</option>';
}
if( in_array('banana', $_GET['exampleList']) ) {
echo '<option value="banana" selected>Banana</option>';
} else {
echo '<option value="banana">Banana</option>';
}
if( in_array('cherry', $_GET['exampleList']) ) {
echo '<option value="cherry" selected>Cherry</option>';
} else {
echo '<option value="cherry">Cherry</option>';
}
?>
</select>
<input type="submit" value="Submit" id="submitButton">
</form>
请注意,我在 select 的名称中添加了 [] 并更正了 br 标签。
添加 [] 会将类型从 "string"(文本)更改为数组(多个文本)。然后我们可以检查包含哪些文本。
亲自尝试一下,稍微修改一下代码。
我终于找到了解决方案:
唯一的缺陷是顺序:)
不过因为我是用插件显示的,所以没关系。
修复:
我创建了 2 个数组列表
list1 全部都在里面
list2 包含所有选定值
然后我从 list1 中减去 list2 并且没有重复项
所以我可以用不同的打印方法打印。
<?php error_reporting(E_WARNING);
$fruitArray = array("Apple", "Banana", "Cherry", "Durian", "Eggfruit", "Fig", "Grapefruit");
$selectedFruitArray = $_GET['exampleList'];
$fruitArray = array_diff($fruitArray, $selectedFruitArray);
?>
<form action="" method="get">
<select name="exampleList[]" multiple>
<?php
foreach($fruitArray as $value) {
echo "<option value='$value'>$value</option>";
}
foreach($selectedFruitArray as $value) {
echo "<option value='$value' selected>$value</option>";
}
?>
</select>
<input type="submit">
</form>
我有一个 select 列表,但是在页面重新加载时,列表中的数据没有被保存。 我已经通过从 $_GET 读取变量来使用 TextBoxes 和 Radio 按钮解决了这个问题。 这是我现在的表格示例:
<form action="" id="exampleForm" method="get">
<input type="checkbox" name="exampleCheckbox" <?php if (isset($_GET['exampleCheckboxStatus'])) {echo "checked";} ?>>Check this
</br>
<select name="exampleList" multiple>
<option>Apple</option>
<option>Banana</option>
<option>Cherry</option>
</select>
<input type="submit" value="Submit" id="submitButton"> </form>
我想在提交后保留 'exampleList' 的值 (我保持在同一页面上)
我在这里看到的帖子几乎和我问的差不多,但他们中的大多数都想使用 javascript。是否有解决我的问题的方法,看起来与我现在已经拥有的类似?我想用 php 解决这个问题,因为我认为我对 Javascript 的了解还不够(还)
使用FormRepo,一个专门用来保留表单数据的插件 在页面刷新。
它的用法也很简单:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script src="FormRepo.js"></script>
<script>
var $form = $('#input')
, $output = $('#output')
, repo = new FormRepo('restclient')
;
// get the last submitted values back
repo.restore($form/*, $form.attr('id')*/ ); // don't necessarily need an identifier
$form.submit(function (e) {
// preserve the last submitted values
repo.preserve($form/*, $form.attr('id')*/ ); // don't necessarily need an identifier
});
console.log( repo.all() );
</script>
您可以使用会话来完成。这是使用它可以在会话中存储最后选择的值的方式。即使重新加载paga,Session值也不会被破坏。
例如,
<?php
session_start(); // Other Code
<div>
<p>Subtitle needs to be
<input type="radio" name="subTitleRadio" <?php if ($_SESSION['subTitleRadio'] != "LIKE") echo "checked"; ?> value="LIKE">contain
<input type="radio" name="subTitleRadio" <?php if ($_SESSION['subTitleRadio'] == "=") echo "checked"; ?> value="=">be equal to
</p>
<input type="search" name="subTitleSearchBox" placeholder="filter for subtitle" class="chosenStyle" value="<?php echo $_GET['subTitleSearchBox'];?>">
</div> //Other Code
?>
PHP提交后会话中设置值的代码:
<?php
session_start(); //Not required if your form action is on same page, else required //Rest code
$_SESSION['subTitleRadio'] = $_GET['subTitleRadio'] // OR $_POST['subTitleRadio']; // Rest code
?>
同样的代码对我有用。
首先是选项的值参数,然后您可以检查 exampleList 是否具有正确的值并使用它。例如:
<option value="apple" <?php if (isset($_GET['exampleList']) && $_GET['exampleList'] == "apple") echo "selected=\"selected\""; ?>>Apple</option>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script>
$(document).ready(function(){
var opts = localStorage.getItem('opts'); // get selected items from localStorage key
opts = opts.split(','); // split result from localstorage to array
$('#exampleList').val(opts); // select options with array
});
</script>
<html>
<body>
<select id="exampleList" multiple>
<option value="apple">Apple</option>
<option value="banana">Banana</option>
<option value="cherry">Cherry</option>
</select>
</body>
</html>
当您POST表单时,您只需将选定的选项值以逗号分隔写入本地存储。
好吧,你可以按照这些思路尝试一些东西。它有点长,你可以缩短它很多。通过这种方式展示,我希望它更容易理解。
<form action="" id="exampleForm" method="get">
<?php
if (isset($_GET['exampleCheckboxStatus'])) {
echo '<input type="checkbox" name="exampleCheckbox" checked> Check this';
} else {
echo '<input type="checkbox" name="exampleCheckbox"> Check this';
?>
<br />
<select name="exampleList[]" multiple>
<?php
if( in_array('apple', $_GET['exampleList']) ) {
echo '<option value="apple" selected>Apple</option>';
} else {
echo '<option value="apple">Apple</option>';
}
if( in_array('banana', $_GET['exampleList']) ) {
echo '<option value="banana" selected>Banana</option>';
} else {
echo '<option value="banana">Banana</option>';
}
if( in_array('cherry', $_GET['exampleList']) ) {
echo '<option value="cherry" selected>Cherry</option>';
} else {
echo '<option value="cherry">Cherry</option>';
}
?>
</select>
<input type="submit" value="Submit" id="submitButton">
</form>
请注意,我在 select 的名称中添加了 [] 并更正了 br 标签。
添加 [] 会将类型从 "string"(文本)更改为数组(多个文本)。然后我们可以检查包含哪些文本。
亲自尝试一下,稍微修改一下代码。
我终于找到了解决方案: 唯一的缺陷是顺序:) 不过因为我是用插件显示的,所以没关系。
修复: 我创建了 2 个数组列表 list1 全部都在里面 list2 包含所有选定值
然后我从 list1 中减去 list2 并且没有重复项 所以我可以用不同的打印方法打印。
<?php error_reporting(E_WARNING);
$fruitArray = array("Apple", "Banana", "Cherry", "Durian", "Eggfruit", "Fig", "Grapefruit");
$selectedFruitArray = $_GET['exampleList'];
$fruitArray = array_diff($fruitArray, $selectedFruitArray);
?>
<form action="" method="get">
<select name="exampleList[]" multiple>
<?php
foreach($fruitArray as $value) {
echo "<option value='$value'>$value</option>";
}
foreach($selectedFruitArray as $value) {
echo "<option value='$value' selected>$value</option>";
}
?>
</select>
<input type="submit">
</form>