打开路线。显示onchange下拉列表

时间:2017-05-22 09:56:13

标签: javascript jquery laravel

在我的视图中,tests.index可以通过点击数据来自数据库的选择下拉列表来打开我的路线tests.show吗?

我的控制器:

public function index(Request $request)
{ 
  $tests = DB::table('test')->distinct()->get();
  return view('tests.index')->with('tests', $tests);
}

public function show($id)
{ 
  $test = Test::findOrFail($id); 
  return view('tests.show', compact('test')); 
}

我的观点索引:

 <select id="apports" type="dropdown-toggle" class="form-control" name="apports" onchange="{{ route("tests.show", $test->id) }}">
<option value="choisir" selected disabled>Choisir</option>
@foreach($tests as $test)
<option class="apports" value="{{$test->id}}">{{$test->apports}}</option>
@endforeach

当我把路线放在这里时:onchange我收到错误“Undefined variable:test” 当我在选择下面添加一个按钮时:

<a class="btn btn-small btn-success" href="{{ route("tests.show", $test->id) }}">Show</a>

我总是得到表格的最后一个ID ...

我宁愿没有按钮,只是当我在select中更改值时,返回tests.show ...有人可以帮我吗?

2 个答案:

答案 0 :(得分:0)

$test变量未在索引视图中设置,只有$tests集合可用,因为您加载了该视图:

return view('tests.index')->with('tests', $tests);

您需要使用一些JavaScript来实现您的目标。 在索引模板中:

<select id="apports" type="dropdown-toggle" class="form-control" name="apports" onchange="goToTestPage(this.value)">

然后在您的JavaScript文件中:

function goToTestPage(id) {
  window.location.href = "link to your show route/"+id;
}

如果测试ID由用户动态更改,则无法在PHP上设置它,因为PHP在用户实际执行选择之前执行,因此您必须依赖JavaScript

答案 1 :(得分:0)

您只需要一个javascript代码段来阅读选项更改并重定向您。

<select id="apports" type="dropdown-toggle" class="form-control" name="apports">
    <option value="choisir" selected disabled>Choisir</option>
    @foreach($tests as $test)
        <option class="apports" value="{{ route("tests.show", $test->id) }}">{{ $test->apports }}</option>
    @endforeach
</select>

<script>
    $('select').on('change', function (e) {
        var link = $("option:selected", this).val();
        if (link) {
            location.href = link;
        }
    });
</script>