A-AA+then

ถามเรื่อง Ajax กับ Jquery

1,786

ผมทำฟอร์ม แล้วใช้ Jquery เป็นตัว Validate ฟอร์มหน่ะคับ

แล้วหน้าหลักผมใช้ AJAX ดึงฟอร์มนั้นขึ้นมาแสดง แต่ มันติดปัญหาอยู่ว่า ทำไม Jquery ที่ใช้ Validate ฟอร์มนั้นมันไม่ทำงานคับ

ฟอร์มมันขึ้นมาในหน้าหลักอยู่ แต่ Jquery มันไม่ทำงานคับ

รบกวนด้วยนะคับ

10 ความคิดเห็น

ทำความเข้าใจสักนิดครับ

Javascript ในหน้าที่ถูก Ajax เรียก ไม่สามารถทำงานได้ครับ ดังนั้น ให้เตรียม Javascript ที่จะต้องใช้งานไว้ก่อนครับ อ่านบทความเกี่ยวกับ Ajax บนเว็๋บประกอบครับ
1

555+++

หาไม่เจอเหมือนกัน เขียนให้ใหม่แล้ว
2

 แล้วผมต้องทำงัยอ่ะคับ หรือว่ามันใช้ไม่ได้ ต้องอยู่หน้าหลักอย่างเดียวหรือคับ
3

ผมก็เจอปัญหานี้ เหมือนกันครับ  ajax ดึง javascript มาแต่ไม่ทำงาน ลองทำตามบทความ ที่เอา java มาไว้ในหน้าหลัก ก็ใช้ได้ครับ

แต่ใช้ได้เฉพาะ IE8 ครับ พอมาลอง กับ IE7 และ Firefox ใช้ไม่ได้อ่ะครับ

function ที่พูดถึงคือ autotab ครับ ไปโหลดมาจาก

http://www.lousyllama.com/sandbox/jquery-autotab

ครับ ลองแล้วยังไงก็ไม่ได้อ่ะครับ

แต่ function อื่นๆทำตามบทความได้ทำได้น่ะ งงมากมาย กับ หลายๆ Bowser
4

แง้ๆ

ทำไม่ออก สงสัยได้ทำแบบเดิมแน่ๆ

เหอๆ ยังงัยก็ขอบคุณนะคับ จะลองหาวิธีดู 

 
5

ไม่มีทางเลือกครับ

เท่าที่รู้ Frame Work อื่นๆ ประสบปัญหานี้ทั้งนั้น บางครั้งเราอาจจะต้องเขียนโค้ดใหม่เพื่อให้ มันรองรับกับวิธีที่จะใช้ครับ ซึ่งต้องดูเป็นกรณีไป ฟังก์ชั่นที่เขียนไว้โดยวิธีปกติ อาจไม่ทำงานเมื่อใช้ Ajax ครับ และนอกจากนี้ เรื่อง cross browser ก็เป็นอีกปัญหา ที่ควรคำนึงถึงครับ

ผมยกตัวอย่างจากบทความ ใน event onclick เราก็ยังไม่สามารถใช้ Javascript เพื่อทำงานได้อยู่ดี จำต้องเปลี่ยนมาใช้ event ระดับ 3 แทนครับ
6

ในกรณีของ autotab ฟังก์ชั่นที่มีปัญหาน่าจะเป็น ready() ครับ เนื่องจากฟังก์ชั่นนี้ จะเกิดขึ้นเมื่อเกิด event onload แล้วเท่านั้น

ทบทวนปัญหากันนิดนึง เอโค้ดเขามาใช้ รู้หรือเปล่าว่าคำสั่งที่เขาเรียกใช้ เขามีไว้เพื่ออะไร

$(document).ready(function() {
 // do some thing
});


เขาใจหรือไม่ว่าคำสั่งด้านบน คือ อะไร และ มีไว้เพื่ออะไร ลองกลับไปศึกษา jquery ดู

คำสั่งนี้เทียบเท่ากับ event onload ของ document ครับ ดังนั้นเมือจะเรียกใช้ฟังก์ชั่นภายในคำสั่งนี้ ฟังก์ชั่นนั้นๆ จะทำงานเมื่อ document โหลดเรียบร้อยแล้ว แต่....

เมื่อเราใช้งาน Ajax ในการโหลด document มันไม่ไ้ด้โหลดด้วย ดังนั้น event นี้มันก็ไม่เกิด ทำยังไงมันก็ไม่เกิด....

จุดประสงค์ในการใช้งานคำสั่งนี้ ก็เพื่อรอให้ document โหลดเรียบร้อยแล้ว แต่เมื่อ document โหลดเรียบร้อยแล้ว เราก็ไม่มีความจำเป็นต้องใช้มัน

ในการแก้ปัญหาอาจททดลองเอาฟังก์ชั่น ready ออกไปเลยก็ได้ครับ แล้วเอาคำสั่ง เรียกใช้ autotab ไปไว้ที่ javascript หลักแทนครับ

หรือถ้ามันยังไม่ทำงาน ก็ให้หน่วงเวลาสักเล็กน้อย เพื่อให้ element ต่างๆ สร้างเสร็จแล้วถึงค่อยเรียกใช้ก็ได้

windows.setTimeout(function{
// do some thing
}, 10);

ถ้า 10 ยังไม่พอ ก็ลองเพิ่มให้นานขึ้นอีก ก็ได้ครับ

ทุกปัญหามีทางออกครับ ถ้ารู้ว่า ต้นเหตุของปัญหาเกิดจากอะไร ซึ่งเราจะรู้ได้ ถ้าเราศึกษาสิ่งที่เราทำให้ถ่องแท้ครับ....ขอให้แก้ไขได้นะ
7

ขอบคุณค๊าฟ


จะลองดูคับ

8

ละเอียดมากเลยครับ เดียวผมจะลองทำดูครับ ขอบคุณมากๆครับ

9

ถ้าจะใช้งานพวก event jquery เช่น

       $("a#demo").click(function(){
            alert("Mouse Click");
        });

        $("a#demo2").mouseover(function(){ 
            alert("Mouse Over");
        });       
       
        $("a#demo3").mouseout(function(){ 
            alert("Mouse Out");
        });   

ต้องให้อยู่ภายใต้

 $(document).ready(function(){
      // เริ่มต้นโค้ดของคุณในส่วนนี้
 });

หรือ

$(function(){
  // เริ่มต้นโค้ดของคุณในส่วนนี้
});

หรือ

jQuery(function($) {
  // เริ่มต้นโค้ดของคุณในส่วนนี้
});
10
^