Audio clip: Adobe Flash Player (version 9 or above) is required to play this audio clip. Download the latest version here. You also need to have JavaScript enabled in your browser.

วันนี้มาแนะนำ plugin ดีๆ อีกตัว…

โปรแกรมเมอร์หลายคนที่เขียน ajax หรือ javascript บ่อยๆ คงเคยเจอปัญหา ว่า javascript ไม่ยอม ทำงานต่อหลังจากที่เรา append DOM ใหม่ๆ ที่มี event เข้ามาด้วย

จริงๆ ผมก็เคยแนะนำวิธีไปคร่าวๆ แล้วเหมือนกัน ใน “วิธีแก้ไขปัญหา events ไม่ทำงานหลังจาก ajax requested

แต่วันนี้จะมาทำเรื่องง่ายให้เป็นเรื่อง ง่ายเข้าไปอีด้วย plugin ดีๆ ตัวนี้ “livequery

สมมุติว่าเราเขียน jquery แบบนี้

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  3. <head>
  4. <title>jqueryTips.com</title>
  5. <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
  6. <script type="text/javascript" src="jquery.js"></script>
  7. <script language="JavaScript">
  8. <!–
  9. $(document).ready(function() {
  10.  
  11.     $(’ul#container li’).click(function() {
  12.         $(this).clone().appendTo(’ul#container’);
  13.     });
  14.  
  15. });
  16. //–>
  17. </script>
  18. </head>
  19. <body>
  20.  
  21. <ul id="container">
  22.     <li><a href="#">Try me</a></li>
  23. </ul>
  24.  
  25. </body>
  26. </html>

ซึ่งการเขียนแบบนี้ แน่นอนว่า หลังจากที่ มีการ append DOM ขึ้นมาใหม่แล้ว ตัวที่ append ขึ้นมาจะไม่สามารถทำงานต่อไปได้ แต่ถ้าเราเปลี่ยนมาเป็นเขียนโดยใช้ livequery ช่วย แบบนี้

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  3. <head>
  4. <title>jqueryTips.com</title>
  5. <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
  6. <script type="text/javascript" src="jquery.js"></script>
  7. <script type="text/javascript" src="jquery.livequery.pack.js"></script>
  8. <script language="JavaScript">
  9. <!–
  10. $(document).ready(function() {
  11.  
  12.     $(’ul#container li’).livequery(’click’, function() {
  13.         $(this).clone().appendTo(’ul#container’);
  14.     });
  15.  
  16. });
  17. //–>
  18. </script>
  19. </head>
  20. <body>
  21.  
  22. <ul id="container">
  23.     <li><a href="#">Try me</a></li>
  24. </ul>
  25.  
  26. </body>
  27. </html>

ปัญหาทุกอย่างก็จะหมดไปทันที ทั้งยังสามารถเอาไปใช้กับ ajax ได้อย่างสบาย ลองดูละกัน ^^

  1. One Response to “livequery ปลั๊กอินที่ ช่วยแก้ปัญหา JS ไม่ยอมเชื่อฟังหลังจาก DOM อัพเดท”

  2. ต้องขอบคุณมากๆครับ สำหรับ plugin ดีๆแบบนี้ เป็นประโยชน์กับผมมากครับ

    ฝากเนื้อฝากตัวด้วยครับ มือใหม่หัดโค้ด

    By Anan on Sep 30, 2008

Post a Comment