ฉันค่อนข้างใหม่ในทีมผู้พัฒนาของเรา
ฉันต้องการข้อโต้แย้งที่รัดกุมและ / หรือตัวอย่าง "หลุมพราง" ดังนั้นในที่สุดเจ้านายของฉันจะเข้าใจถึงข้อดีของ 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) นั้นไม่ง่ายอีกต่อไปเช่นกับ
<input type="text" name="somename" id="someid" onchange="performChange()">
เขาสามารถดูได้ทันทีว่าฟังก์ชั่นใดทำงานกับเหตุการณ์การเปลี่ยนแปลงและกระโดดไปทางขวาใน ไฟล์ JS ขนาดใหญ่เต็มรูปแบบของปาเก็ตตี้รหัส
ในกรณีของ JavaScript ที่ไม่สร้างความรำคาญสิ่งเดียวที่เขาจะเห็นคือ:
<input type="text" name="somename" id="someid" />
และเขาไม่รู้ว่ามีเหตุการณ์บางอย่างถ้ามีถูกผูกไว้กับองค์ประกอบนี้และฟังก์ชั่นที่จะถูกเรียก
ฉันกำลังมองหาวิธีแก้ปัญหาและพบว่า:
$(document).data('events') // or .. $(document).data('events').click
แต่ "วิธีการ" นี้ทำให้ใช้เวลา "นานเกินไป ... " เพื่อค้นหาว่าฟังก์ชันใดใช้ไฟในเหตุการณ์ใดดังนั้นฉันจึงถูกสั่งให้หยุดการเชื่อมโยงเหตุการณ์เช่นนั้น
ฉันขอให้คุณยกตัวอย่างหรือข้อดีที่แข็งแกร่งหรือคำแนะนำอื่น ๆ สำหรับ "ทำไมเราควรใช้ UJS"
ปรับปรุง:ข้อเสนอแนะเพื่อ "เปลี่ยนงาน" ไม่ใช่ทางออกที่ดี
UPDATE 2:ตกลงฉันไม่ได้แนะนำเท่านั้นที่จะใช้ jQuery เหตุการณ์ผูกพันฉันไม่ได้ หลังจากที่ฉันเขียน Event-Delegation ทั้งหมดเจ้านายก็มาหาฉันและถามฉันว่าทำไมฉันถึงได้มอบหมายงานอีเวนต์ด้วยแนวทางที่แตกต่างและวิธีการที่เขาไม่รู้
ฉันพูดถึงประโยชน์ที่ชัดเจนบางอย่างเช่น - มีฟิลด์อินพุต 15 ฟิลด์และทั้งหมดมีonchange
เหตุการณ์ (ไม่เพียง แต่บางฟิลด์ก็มีonkeyup
) ดังนั้นจึงเป็นประโยชน์มากกว่าที่จะเขียนฟิลด์มอบหมายงานประเภทนี้สำหรับฟิลด์อินพุตทั้งหมด แทนที่จะทำ 15 ครั้งโดยเฉพาะอย่างยิ่งถ้า HTML ทั้งหมดจะแสดงผลด้วย PHP ของ echo ->echo '... <input type="text" id="someid" ... />...'
js-this-class-do-something
คลาสดังนั้นคุณสามารถ CTRL + F ในโค้ดได้อย่างง่ายดาย