คำถามติดแท็ก jquery-on

15
ใช้ jQuery เพื่อทดสอบว่าอินพุตมีโฟกัสหรือไม่
ในหน้าแรกของเว็บไซต์ที่ฉันกำลังสร้างหลายแห่ง<div>ใช้ CSS :hoverหลอกคลาสเพื่อเพิ่มเส้นขอบเมื่อเมาส์อยู่เหนือพวกเขา หนึ่งในนั้น<div>ประกอบด้วย a <form>ซึ่งใช้ jQuery จะเก็บขอบไว้หากอินพุตภายในนั้นมีโฟกัส มันทำงานได้อย่างสมบูรณ์ยกเว้นว่า IE6 ไม่รองรับ:hoverองค์ประกอบอื่นที่ไม่ใช่<a>s ดังนั้นสำหรับเบราว์เซอร์นี้เราเท่านั้นที่ใช้ jQuery เพื่อเลียนแบบ CSS :hoverโดยใช้$(#element).hover()เมธอด ปัญหาเดียวคือตอนนี้ที่ jQuery จัดการทั้งแบบฟอร์มfocus() และ hover()เมื่ออินพุตมีการโฟกัสผู้ใช้จะย้ายเมาส์เข้าและออกเส้นขอบจะหายไป ฉันคิดว่าเราสามารถใช้เงื่อนไขบางอย่างเพื่อหยุดพฤติกรรมนี้ ตัวอย่างเช่นหากเราทดสอบโดยใช้เมาส์หากอินพุตใด ๆ มีโฟกัสเราสามารถหยุดเส้นขอบไม่ให้หายไปได้ AFAIK ไม่มี:focusตัวเลือกใน jQuery ดังนั้นฉันไม่แน่ใจว่าจะทำให้สิ่งนี้เกิดขึ้นได้อย่างไร ความคิดใด ๆ

4
เหตุการณ์ jQuery ทั้งหมดควรผูกติดกับ $ (เอกสาร) หรือไม่
สิ่งนี้มาจากไหน เมื่อฉันเรียนรู้ jQuery ครั้งแรกปกติฉันจะแนบกิจกรรมดังนี้ $('.my-widget a').click(function() { $(this).toggleClass('active'); }); หลังจากเรียนรู้เพิ่มเติมเกี่ยวกับความเร็วของตัวเลือกและการมอบหมายเหตุการณ์ฉันอ่านในหลาย ๆ ที่ที่ "การมอบหมายเหตุการณ์ jQuery จะทำให้โค้ดของคุณเร็วขึ้น" ดังนั้นฉันจึงเริ่มเขียนโค้ดแบบนี้: $('.my-widget').on('click','a',function() { $(this).toggleClass('active'); }); นี่เป็นวิธีที่แนะนำในการทำซ้ำพฤติกรรมของกิจกรรม. live () ที่เลิกใช้แล้ว ซึ่งเป็นสิ่งสำคัญสำหรับฉันเนื่องจากมีไซต์ของฉันเพิ่ม / ลบวิดเจ็ตอยู่ตลอดเวลา ข้างต้นไม่ได้ทำงานเหมือนกับ. live () เนื่องจากองค์ประกอบเท่านั้นที่ถูกเพิ่มลงในคอนเทนเนอร์ที่มีอยู่แล้ว '.my-widget' จะได้รับพฤติกรรม หากฉันเพิ่มบล็อก html แบบไดนามิกอีกครั้งหลังจากที่โค้ดนั้นรันองค์ประกอบเหล่านั้นจะไม่ทำให้เกิดเหตุการณ์ที่เกี่ยวข้อง แบบนี้: setTimeout(function() { $('body').append('<div class="my-widget"><a>Click does nothing</a></div>'); }, 1000); สิ่งที่ฉันต้องการบรรลุ: พฤติกรรมเก่าของ. live () // …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.