2018年9月30日 星期日

Laravel 之 javascript 事件處理失效之解法

Laravel 預設的 layouts/app.blade.php 中,預設使用 defer 載入 js/app.js

結果導致自己寫的 javascript 中 event handler 失效,似乎根本沒註冊的樣子,後來拔掉 app.js,自己加入 bootstrap 4 與相關 js,即使都有加入 defer,也都沒有問題

網路社群大大推測 app.js 似乎有做清除事件的動作,導致 app.js 因為 defer 的關係,會在頁面解析完成,頁面中的 script 執行完成之後才執行,而把我註冊的事件清除了

解決方式:

  1. 繼續使用 app.js,但不用 defer
  2. 繼續使用 defer app.js,但需要把 code 寫在 document 的 DOMContentLoaded 事件中
  3. 繼續使用 defer app.js,但需要把 code 寫在外部檔,在 app.js 之後用 script defer 引入
  4. 不使用 app.js,自行載入相關 js

參考資料:

2018年9月17日 星期一

PHP 7 中 ?? 與 ?: 的差別

php 7 - PHP ternary operator vs null coalescing operator - Stack Overflow

echo $a ? : $b;

echo $a ?? $b;

以上兩種用法相當於如下之傳統三元運算

echo $a ? $a : $b;

若 $a 為 truthy 值則 echo 出 $a 之值,$a 為 falsy 值則 echo 出 $b 之值

但 $a 未宣告或未賦值時會 echo 出 $b 之值,但有警告訊息,可加 isset() 避免

echo (isset($a) && $a) ? $a : $b;

?:  (ternary operator) 之行為表現與傳統三元運算一致,單純簡寫而已

??  (null coalescing operator) 則不會有警告訊息

若 $a = null 則三種語法表現一致,均  echo 出 $b 之值