ผูกและเลิกผูกเหตุการณ์ใน Jquery

$(document).on("pagebeforeshow", function(event) {
            $("#mybtn").on("click", function(e) {
                $.mobile.showPageLoadingMsg();
                $.mobile.changePage("twitter.html", {
                    reloadPage: false, changeHash: true,
                });
                $('#mybtn').unbind('');

            });
        });

คุณช่วยบอกฉันหน่อยได้ไหมว่าทำไม Unbind จึงมีความสำคัญใน Jquery mobile และโปรดบอกวิธีที่ดีที่สุดในการเลิกผูกเหตุการณ์ ฉันใช้วิธีการต่อไปนี้เพื่อผูกและเลิกผูกเหตุการณ์ ไม่เป็นไร


person user2889058    schedule 20.10.2013    source แหล่งที่มา


คำตอบ (1)


ดูตัวอย่างนี้: ไม่ใช้ UNBIND

รหัส

$("#page2").on("pagebeforeshow", function(){
    $("#testBtn").on("click", function(){
       alert("Hi!"); 
    });
});

หากคุณเปลี่ยนจากหน้าที่ 1 ไปหน้าที่ 2 แล้วคลิกปุ่มชื่อ Click me คุณจะเห็นว่าการแจ้งเตือน "สวัสดี!" จะแสดงอย่างถูกต้อง กิจกรรมถูกผูกไว้เมื่อ pagebeforeshow จนถึงตอนนี้ทุกอย่างเรียบร้อยดี

ตอนนี้กลับไปที่หน้าที่ 1 แล้วโหลดอีกครั้งหน้าที่ 2 คลิกปุ่ม Click me อีกครั้ง.. คุณจะเห็นว่าการแจ้งเตือนปรากฏ 2 ครั้ง! และนี่เป็นสิ่งที่ผิด นั่นเป็นเหตุผลที่คุณต้อง unbind เหตุการณ์ก่อนที่จะผูกมันอีกครั้ง

โดยพื้นฐานแล้ว ทุกครั้งที่คุณโหลดเพจ 2 คุณจะเชื่อมโยงเหตุการณ์ใหม่เข้ากับปุ่ม ดังนั้น หากคุณโหลดหน้านั้น 10 ครั้ง คุณจะมี 10 เหตุการณ์ผูกอยู่กับปุ่ม ซึ่งจะเริ่มทำงานทันทีที่คลิกปุ่ม

นี่คือซอที่ใช้งานได้กับ unbind (ในการเลิกผูกกิจกรรม ฉันใช้ off()): UNBIND USED

รหัส

$("#page2").on("pagebeforeshow", function(){
    $("#testBtn").off("click").on("click", function(){
       alert("Hi!"); 
    });
});

ดูที่นี่ เพื่อทำความเข้าใจว่าทำไมฉันถึงใช้ off() แทนที่จะเป็น unbind() และ ที่นี่ หากคุณต้องการดูว่า off() ทำงานอย่างไร

ฉันหวังว่านี่จะช่วยคลายข้อสงสัยของคุณ ..

person BeNdErR    schedule 20.10.2013
comment
$(document).on('click.register', '.registerSubmitter', function(e) { // do some }); คุณคิดอย่างไรเกี่ยวกับวิธีนี้ stackoverflow.com/questions/10950443/ - person user2889058; 20.10.2013