多選搭配 ->when() 在編輯資料的時候都會出現 addslashes() expects parameter 1 to be string, array given 問題,新增資料則正常。
解決方法是不要用 ->when(),把兩個欄位拆開來寫,再另外寫 JS 控制欄位的顯示或隱藏。
$form ->multipleSelect('nationality', 'Nationality') ->options([ 1 => 'China', 2 => 'foreign', ]) ->when('has', 2, function (Form $form) { $form->text('name', 'Name'); });發生原因是 Select class JS 會用到 addslashes() 函數,單選的時候把單個 value 傳給函數處理沒問題;多選時變成傳一個陣列,就會出錯。
解決方法是不要用 ->when(),把兩個欄位拆開來寫,再另外寫 JS 控制欄位的顯示或隱藏。
$form ->multipleSelect('nationality', 'Nationality') ->options([ 1 => 'China', 2 => 'foreign', ]); $form->text('name', 'Name'); Admin::script(" $('.nationality').on('change', function (e) { var checked = $(this).val(); if ($.inArray('2', checked) != -1) { $('.name').closest('.form-group').removeClass('hide'); } else { $('.name').closest('.form-group').addClass('hide'); } }).trigger('change'); ");
留言
張貼留言