私は開発チームでかなり新しいです。
いくつかの強力な議論や「落とし穴」の例が必要なので、上司は最終的にUnobtrusive JavaScriptの利点を理解し、彼とチームの他のメンバーがこのようなことをやめるようにします。
<input type="button" class="bow-chicka-wow-wow"
onclick="send_some_ajax(); return false;" value="click me..." />
そして
<script type="text/javascript">
function send_some_ajax()
{
// bunch of code ... BUT using jQuery !!!
}
</script>
かなり一般的なパターンを使用することをお勧めします。
<button id="ajaxer" type="button">click me...</button>
そして
<script type="text/javascript">
// since #ajaxer is also delivered via ajax, I bind events to document
// -> not the best practice but it's not the point....
$(document).on('click', '#ajaxer', function(ev) {
var $elem = $(this);
ev.preventDefault();
});
上司(および他の人)がこのアプローチを使用したくない理由は、FireBug(またはChrome Dev Tools)のイベント検査が、たとえば
<input type="text" name="somename" id="someid" onchange="performChange()">
change-eventでどの関数が実行されるかをすぐに確認し、spaghetti-codeでいっぱいの巨大なJSファイルでその関数にジャンプできます。
控えめなJavaScriptの場合、彼が目にする唯一のものは次のとおりです。
<input type="text" name="somename" id="someid" />
そして、もしあれば、いくつかのイベントがこの要素にバインドされているかどうか、そしてどの機能がトリガーされるかについて彼は知りません。
私は解決策を探していましたが、それを見つけました:
$(document).data('events') // or .. $(document).data('events').click
しかし、この「アプローチ」により、どのイベントでどの関数が起動するかを見つけるのに「時間がかかりすぎます...」となるため、そのようなバインドイベントを停止するように言われました。
「なぜUJSを使用すべきか」について、いくつかの例や強力な利点、またはその他の提案をお願いしています。
更新:「仕事を変える」という提案は理想的な解決策ではありません。
更新2: OK、jQueryイベントバインディングの使用を提案しただけでなく、そうしました。すべてのイベント委任を書いた後、ボスが私のところに来て、私に尋ねました。なぜ私は彼が知らないアプローチとアプローチでイベント委任をしているのですか?
15の入力フィールドがあり、すべてにonchange
イベントがあります(だけでなく、それらの一部にもあるonkeyup
)など、いくつかの明らかな利点に言及しました。特にHTMLのすべてがPHPのエコーでレンダリングされる場合、15回行う代わりに->echo '... <input type="text" id="someid" ... />...'
js-this-class-do-something
クラスがあるため、コード内で簡単にCTRL + Fを使用できます。