ในขณะที่ฉันไม่สามารถแสดงความคิดเห็นดังนั้นฉันจะเขียนเป็นคำตอบ!
โปรดเข้าใจความแตกต่างระหว่างตัวเลือก css ": hover" และเหตุการณ์ hover!
": hover" เป็นตัวเลือก css และแน่นอนถูกลบออกเมื่อใช้เหตุการณ์เช่นนี้$("#elementId").is(":hover")
แต่ในความหมายมันไม่มีอะไรเกี่ยวข้องกับการเลื่อนเหตุการณ์ jQuery
หากคุณโค้ด$("#elementId:hover")
องค์ประกอบจะถูกเลือกก็ต่อเมื่อคุณวางเมาส์ไว้ ข้อความข้างต้นจะทำงานกับ jQuery ทุกเวอร์ชันโดยการเลือกองค์ประกอบนี้ด้วยการเลือก css ที่แท้จริงและถูกต้อง
ในทางกลับกันโฮเวอร์ของเหตุการณ์คือ
$("#elementId").hover(
function() {
doSomething();
}
);
ถูกคิดค่าเสื่อมราคาเป็น jQuery 1.8 ที่นี่เป็นสถานะจากเว็บไซต์ jQuery:
เมื่อใช้ชื่อเหตุการณ์ "hover" ระบบย่อยของเหตุการณ์จะแปลงเป็น "mouseenter mouseleave" ในสตริงเหตุการณ์ สิ่งนี้น่ารำคาญด้วยเหตุผลหลายประการ:
ซีแมนทิกส์: โฮเวอร์ไม่เหมือนกับเมาส์ที่เข้าและออกจากองค์ประกอบมันหมายถึงการชะลอความเร็วหรือความล่าช้าก่อนยิง ชื่อเหตุการณ์: event.type ที่ส่งคืนโดยตัวจัดการที่แนบมานั้นไม่ได้โฮเวอร์ แต่เป็น mouseenter หรือ mouseleave ไม่มีเหตุการณ์อื่นที่จะทำเช่นนี้ การเลือกชื่อ "โฮเวอร์" ร่วมกัน: ไม่สามารถแนบกิจกรรมที่มีชื่อ "โฮเวอร์" และใช้งานโดยใช้. trigger ("โฮเวอร์") เอกสารเรียกชื่อนี้ว่า "ท้ออย่างยิ่งสำหรับรหัสใหม่" แล้วฉันต้องการคัดค้านอย่างเป็นทางการสำหรับ 1.8 และในที่สุดก็ลบออก
ทำไมพวกเขาลบการใช้งานคือ (": โฮเวอร์") ไม่ชัดเจน แต่โอ้ดีคุณยังสามารถใช้งานได้เหมือนด้านบนและนี่คือแฮ็คเล็ก ๆ
(function ($) {
/**
* :hover selector was removed from jQuery 1.8+ and cannot be used with .is(":hover")
* but using it in this way it works as :hover is css selector!
*
**/
$.fn.isMouseOver = function() {
return $(this).parent().find($(this).selector + ":hover").length > 0;
};
})(jQuery);
โอ้และฉันจะไม่แนะนำรุ่นการหมดเวลาเนื่องจากสิ่งนี้ทำให้เกิดความซับซ้อนมากใช้ฟังก์ชันการหมดเวลาสำหรับสิ่งประเภทนี้หากไม่มีวิธีอื่นและเชื่อฉันใน95% เปอร์เซ็นต์ของทุกกรณีมีวิธีอื่น !
หวังว่าฉันจะช่วยคนสองสามคนที่นั่น
Greetz Andy