Как получить старое значение на странице редактирования для выпадающего меню с вводимым текстовым полем в laravel? - PullRequest
0 голосов
/ 30 января 2020

Это мой вывод https://imgur.com/TVaZkwl, я не получаю выбранное значение. В основном это два поля. Одно - раскрывающееся, а другое - поле ввода. Как получить это выбранное значение, если значение выбрано или если значение введено, то показать поле ввода https://imgur.com/WoyIZzs Это мой файл edit.blade

<div class="form-group">
                    <label for="page" class="labelclass">Pages</label>
                    <select class="form-control" name="page" id="pageone">
                      <option value="0">Select page</option>
                      @foreach($pages as $page)
                      <option value="{{$page->id}}" @if(old('page1', $items->content_id) === $page->id) selected @endif>{{$page->title}}</option>
                      @endforeach                                    
                      <option disabled>---</option>
                      <option value='NewField'>Add Custom URL</option>
                    </select>
                    <input class="form-control" type="text" name="page1" id="page" placeholder="https://" value="{{$items->content_id}}" style="display: none; width: 450px; margin-top: 5px;" />
                  </div>

<!--Here is my java script code-->
<script type="text/javascript">
    $(function() {
        // Add lead
        $("#pageone").change(function() {
            var dropvalue = $(this).val();
            if (dropvalue == "NewField") {
                $("#page").show();
            } else {
                $("#page").hide();
            }
        });
    });
</script>

А это мой контроллер

public function edit($id)
    {
        //
        // $items = Menu::with('Content')->findOrFail($id);
        $items = Menu::findOrFail($id);
        $pages = Content::all();
        // return view('menu.edit',compact('items','pages'));
        // dd([$pages, $items]);
        return view('menu.edit',['items'=>$items, 'pages'=>$pages]);
        // return view('menu.edit',['items'=>$items]);
    }



    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
         $this->validate($request,[

            'name'=>'required',
            'status'=>'required|not_in:2',
            'page'=>'required|not_in:0'
         ]);

         $items = Menu::find($id);
// return json_encode($items);
// exit();
         // dd($items);
         $items->name = $request->name;
         $items->status = $request->status;
         // $items->content_id = $request->page;
         if ($request->input('page') == 'NewField') {
             $items->content_id = $request->page1;
         } else {
             $items->content_id = $request->page;
         }
         $items->save();
         // return \Redirect::route('admin_menu')->with('message','Menu  is updated successfully');
         return redirect()->route('admin_menu')->with('message','Menu  is updated successfully');
    }

1 Ответ

0 голосов
/ 30 января 2020

В этой строке есть одна проблема:

<option value="{{$page->id}}" @if(old('page1', $items->content_id) === $page->id) selected @endif>{{$page->title}}</option>

Вы проверяете старое значение page1, которое будет строкой, введенной при вводе текста. Измените его на page:

@if(old('page', $items->content_id) === $page->id)

Чтобы выбрать «Добавить пользовательский URL», вам также необходимо добавить атрибут selected:

<option value='NewField' @if(old('page', $items->content_id) === 'NewField') selected @endif>Add Custom URL</option>

И, наконец, JS Функция также должна запускаться при загрузке, а не только при изменении, поэтому отображается ввод текста (при необходимости).

...