Call route from button inside an <a> tag laravel


Call route from button inside an <a> tag laravel

我是laravel和Javascript的新手。

我有一条看起来像的路线

Route::get('/problems/{problem}/edit', 'AdminController@editProblem');

我的页面看起来像图像

此页面的HTML代码是

@foreach($in_contest->problems as $problem)
    <div class="list-group">
        <a href="#" class="list-group-item">
            <i class="fa fa-file fa-lg"></i>
            {{ $problem->title }}
            <span class="pull-right">
                <button onclick="callRoute()" class="btn btn-xs btn-info button">Edit</button>
            </span>
        </a>
    </div>
@endforeach

我为这个onclick写了javascript代码,它是

<script type="text/javascript">
    function callRoute() {
        window.location = '{{ url('/problems/' . $problem->id . '/edit') }}';
    }
</script>

现在,每次我单击P1、P2或P3上的编辑按钮,都会打开P4的编辑页面。正在为所有人打开相同的url。我希望当我在P1上单击编辑时,它重定向到P1的$problem-id的编辑页面。其他人也一样。

这个问题的解决办法是什么?

它之所以调用p4,是因为在运行foreach循环之后,基本上就是在将问题ID的最后一次迭代写入javascript。

您可以通过将视图代码更改为以下代码来避免将刀片语法一起添加到javascript中,从而将当前问题ID传递给javascript函数

@foreach($in_contest->problems as $problem)
    <div class="list-group">
        <a href="#" class="list-group-item">
            <i class="fa fa-file fa-lg"></i>
            {{ $problem->title }}
            <span class="pull-right">
                <button onclick="callRoute({{ $problem->id }})" class="btn btn-xs btn-info button">Edit</button>
            </span>
        </a>
    </div>
@endforeach

以及您的javascript函数到以下

<script type="text/javascript">
    function callRoute(problemID) {
        window.location = '/problems/' + problemID + '/edit';
    }
</script>

您的页面中有4个结果,而callRoute函数在循环之外,因此循环完成后,您在脚本标记中访问的变量$problem是在结果集合上迭代的最后一个变量,因此它具有id 4

只需像一样编写即可

<button onclick="callRoute({{ $problem->id }})" class="btn btn-xs btn-info button">Edit</button>

并且在您的脚本中

function callRoute(problem_id) {
    window.location = '/problems/' + problem_id + '/edit';
}