在脚本标记中使用@foreach刀片呈现HTML

时间:2019-06-03 09:02:52

标签: php jquery html laravel laravel-blade

我有一个下拉列表。对于所选的特定选项,我想用来自控制器的视图呈现具有不同数据的HTML。

为此,我在视图中编写脚本标签,然后在条件允许的情况下在jQuery内使用blade foreach,然后在刀片php内迭代HTML。但它给了我错误

userprofile:966 Uncaught SyntaxError: Unexpected token <

我是Laravel的新手,仍然在探索,所以想知道是否有可能。 如果不可能,那我该怎么办呢?

这是我的代码

<script>
                        $(document).ready(function () {

                            if ($("#user_right").val() == 1)
                            {
                                @foreach ($user_alias_detail["a"] as $user)

                                        <div class="field">
                                            <input type="text" value="{{ $user->name }}">
                                        </div>
                                @endforeach
                            }
                            elseif ($("#user_right").val() == 2)
                            {
                                @foreach ($user_alias_detail["b"] as $user)

                            <div class="field">
                                <input type="text" value="{{ $user->name }}">
                            </div>
                                @endforeach
                            }
                        });
                    </script>

3 个答案:

答案 0 :(得分:0)

要给您一个完整的答案,我需要知道所有这些元素应在您的代码中显示出来。

我会用这样的东西。您将您的php数组转换为json数组,然后 使用(for .. in)循环遍历json数组。使用jquery append,您可以将html插入父DOM元素中。

<script>
var user_a = @json($user_alias_detail["a"]);
var user_b = @json($user_alias_detail["b"]);


       $(document).ready(function () {

                        if ($("#user_right").val() == 1)

                                for(var user in user_a) {
                                // container div is the wrapper element
                                $(".container-div").append('<div class="field">
                                    <input type="text" value="'+user.name+'">
                                </div>');
                            }
                    }
                    elseif ($("#user_right").val() == 2)
                    {

                            for(var user in user_b) {
                                // container div is the wrapper element
                                $(".container-div").append('<div class="field">
                                    <input type="text" value="'+user.name+'">
                                </div>');
                            }
                    }
                });
</script>

答案 1 :(得分:0)

尝试这段代码。我花时间为你写。您可以对其进行修改以适合您的需求。谢谢。

//form blade

<div class="form-group">
   <label class="control-label">Select Value <span style="color:red">*</span></label>

   <select class="form-control" id="user_right" name="user_right" required>  
      <option value="">--Select--</option>             
      <option value="1"{{(old('user_right')=='1')? "selected"  : ""}}>One</option>
      <option value="2"{{(old('user_right')=='2')? "selected"  : ""}}>Two</option>
      <option value="3"{{(old('user_right')=='3')? "selected"  : ""}}>Three</option>

   </select>

</div>

<div class="form-group">
  @if($htmldata=='')
     <!--display nothing on page-->
  @else

   {{ $htmldata->recorddetails }}

  @elseif                                


</div>


//javascript code to fetch the item id
<script type="text/javascript">
            // When the document is ready
     $(document).ready(function(){

    $("#user_right").change(function(e){

       var value= e.target.value;

       if ("https:" == document.location.protocol) 
        {

        location.href="https://example.com/renderpage/"+value;
        } 
      else 
        {
        location.href="http://example.com/renderpage/"+value;
       }

    });

</script>


//route
Route::get('/loadpage','Controller@displayPage');
Route::get('/renderpage/{id}','Controller@displaydataonPage');


//controller to load page
public function displayPage()
   {  

      $data['htmldata']='';    
      return view('htmlpage', $htmldata);

   }

//controller to display data on page
public function displaydataonPage($id)
   {  
 $data['htmldata']=DB::table('table')->where('datavalue',$id)->orderby('rank','asc')->first();             
      return view('htmlpage', $htmldata);    
   }

答案 2 :(得分:-1)

使用模板文字``

                 <script>
                    $(document).ready(function () {

                        if ($("#user_right").val() == 1)
                        {
                           `
                            @foreach ($user_alias_detail["a"] as $user)

                                    <div class="field">
                                        <input type="text" value="{{ $user->name }}">
                                    </div>
                            @endforeach
                           `
                        }
                        elseif ($("#user_right").val() == 2)
                        {
                          `
                            @foreach ($user_alias_detail["b"] as $user)

                        <div class="field">
                            <input type="text" value="{{ $user->name }}">
                        </div>
                            @endforeach
                          `
                        }
                    });
                </script>

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals