違うんですね
最近vue.jsを勉強しているのですが、どうもcheckboxのクリックイベントで取得できる値がブラウザ毎に異なる事に気付きました。
恐らく超が付くほどの初歩的な内容だと思いますが、忘れないようメモしておきます。
clickイベントで取得できる値
ブラウザ毎に挙動が・・
いろいろ簡単なサンプルを作っていたところ、checkboxにv-on:clickでイベントを設定した時、イベント内で取得できるチェックボックスの選択値が、safariとchrome・firefoxで異なる事に気づきました。
以下をsafariと、chromeまたはfirefoxでそれぞれ実行してみて下さい。value値が異なる事が確認できます。
safariはcheckboxをチェックした後の値が取得できますが、chromeとfirefoxはチェックする前の値が取得されます。
vue.jsのバグでは無さそう
一瞬バグかと思ったのですが、どうも違うようです。
update, this is not a bug. The problem is with how the events are being triggered by each browser. Firefox/Chrome are firing the click even before the change event so Vue doesn't pick it up.
http://forum.vuejs.org/topic/596/how-can-i-get-the-latest-dom-status-on-both-firefox-and-chrome/3
ブラウザの実装によって返る値が違う、ということのようですね。
対応するにはmethodsに定義せずwatchに定義する
このように、checkboxModelをwatchで定義して状態変化を監視すると、変更前と変更後の値を取得する事ができます。状態変化=checkboxのクリックとほぼ同義なので、これで代用できそうです。
雑感
ブラウザの実装の問題だとすると、この問題は恐らく他のFWにも同じ事が言えると思うのですが、どうなのでしょうね。
正直こういうブラウザの実装によって挙動が変わるとか、IE6問題の再来のようで死ぬほどアホくさいです。本来開発者が集中するべきところはそこではないので、なんとかして欲しいものですが、どうにもならないのでしょうね・・・
- 作者: 山田祥寛
- 出版社/メーカー: 技術評論社
- 発売日: 2015/08/19
- メディア: 大型本
- この商品を含むブログ (2件) を見る
速習ECMAScript6: 次世代の標準JavaScriptを今すぐマスター!
- 作者: 山田祥寛
- 出版社/メーカー: WINGSプロジェクト
- 発売日: 2015/08/28
- メディア: Kindle版
- この商品を含むブログを見る