Laravel-admin Form linkage 多選問題

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

留言