跨页面保留 select 个值
Keeping select values across pages
我有几条路线
Route::get('/route_one', 'IndexController@index');
Route::get('/route_two', 'IndexController@index');
它们调用相同的控制器函数,因为这些页面需要相同的数据数组。这个函数如下
public function index()
{
$user = Auth::user();
if( $user ) {
$fileData = $this->fillArrayWithFileNodes(new DirectoryIterator( public_path(). '/images'));
$currentPath= Route::getFacadeRoot()->current()->uri();
if(!empty($fileData)) {
return view('index', compact('fileData', 'currentPath'));
}
} else {
return view('auth.login');
}
}
现在索引视图非常简单,但确实有这一部分
@if($currentPath == 'route_one')
@include('layouts.searchbarRouteOne')
@endif
@if($currentPath == 'route_two')
@include('layouts.searchbarRouteTwo')
@endif
因此,根据调用的路线,会显示不同的侧边栏。现在侧边栏基本上包含大量 select 输入,如下所示
<div class="col-lg-3">
<div class="form-group">
<label>Year</label>
<select id="year" class="form-control">
<option value=""></option>
@foreach($fileData["route_one"] as $year => $products)
<option value="{{ $year }}">{{ $year }}</option>
@endforeach
</select>
</div>
</div>
两个边栏有不同的 select。当 select 选项被 selected 时,会进行 ajax 调用以显示图像。这一切都很好。
这是我的问题。我有一个 link 去 route_one 或 route_two。当单击 link 时页面刷新,select 处于默认状态。我想以某种方式做的是保持 select 输入的最后状态。我没有将此数据存储在数据库中,这可能是个问题?
此外,route_two 依赖于 route_one 中的 select 选项。因此,当 route_two 被 select 编辑时,我需要将其传递给 route_ones 选项。
实现我所追求的目标的最佳方式是什么?
谢谢
想一想您要在这里完成什么:记住旧的输入值。
您可以在单击 link 时发送表单并在您的控制器中刷新数据或使用 JavaScript 将输入值保存到浏览器的存储空间。
使用简单的简单示例 JavaScript
// Get all select-elements
var inputs = document.querySelectorAll('select');
// Loop through them
for (var i = 0; i < inputs.length; i++) {
// Set the old input value
inputs[i].value = localStorage.getItem(inputs[i].name);
// Start listening changes
inputs[i].addEventListener('change', store);
}
// The function to call when the value has changed
function store(event) {
// Set the new value to the browser's storage
localStorage.setItem(event.target.name, event.target.value);
}
在该示例中,您的表单元素需要具有唯一的 name
属性。当然可以使用例如将其关闭id
属性。
我有几条路线
Route::get('/route_one', 'IndexController@index');
Route::get('/route_two', 'IndexController@index');
它们调用相同的控制器函数,因为这些页面需要相同的数据数组。这个函数如下
public function index()
{
$user = Auth::user();
if( $user ) {
$fileData = $this->fillArrayWithFileNodes(new DirectoryIterator( public_path(). '/images'));
$currentPath= Route::getFacadeRoot()->current()->uri();
if(!empty($fileData)) {
return view('index', compact('fileData', 'currentPath'));
}
} else {
return view('auth.login');
}
}
现在索引视图非常简单,但确实有这一部分
@if($currentPath == 'route_one')
@include('layouts.searchbarRouteOne')
@endif
@if($currentPath == 'route_two')
@include('layouts.searchbarRouteTwo')
@endif
因此,根据调用的路线,会显示不同的侧边栏。现在侧边栏基本上包含大量 select 输入,如下所示
<div class="col-lg-3">
<div class="form-group">
<label>Year</label>
<select id="year" class="form-control">
<option value=""></option>
@foreach($fileData["route_one"] as $year => $products)
<option value="{{ $year }}">{{ $year }}</option>
@endforeach
</select>
</div>
</div>
两个边栏有不同的 select。当 select 选项被 selected 时,会进行 ajax 调用以显示图像。这一切都很好。
这是我的问题。我有一个 link 去 route_one 或 route_two。当单击 link 时页面刷新,select 处于默认状态。我想以某种方式做的是保持 select 输入的最后状态。我没有将此数据存储在数据库中,这可能是个问题?
此外,route_two 依赖于 route_one 中的 select 选项。因此,当 route_two 被 select 编辑时,我需要将其传递给 route_ones 选项。
实现我所追求的目标的最佳方式是什么?
谢谢
想一想您要在这里完成什么:记住旧的输入值。
您可以在单击 link 时发送表单并在您的控制器中刷新数据或使用 JavaScript 将输入值保存到浏览器的存储空间。
使用简单的简单示例 JavaScript
// Get all select-elements
var inputs = document.querySelectorAll('select');
// Loop through them
for (var i = 0; i < inputs.length; i++) {
// Set the old input value
inputs[i].value = localStorage.getItem(inputs[i].name);
// Start listening changes
inputs[i].addEventListener('change', store);
}
// The function to call when the value has changed
function store(event) {
// Set the new value to the browser's storage
localStorage.setItem(event.target.name, event.target.value);
}
在该示例中,您的表单元素需要具有唯一的 name
属性。当然可以使用例如将其关闭id
属性。