التابع ‎‎.mouseenter()‎‎ في jQuery

من موسوعة حسوب

‎.mouseenter( handler )‎

القيم المعادة

يعيد كائنًا من النوع jQuery.

الوصف

يربط هذا التابع معالج حدث معين مع الحدث mouseenter عندما يدخل مؤشِّر الفأرة حيِّز عنصر، أو يستدعي ذلك الحدث لتطبيقه على عنصر.

‎.mouseenter( handler )‎

أُضيف مع الإصدار: 1.0.

handler

دالة من الشكل Function( Event eventObject )‎، وتُمثِّل الدالة التي ستُنفَّذ في كل مرة يُستدعى فيها الحدث.

‎.mouseenter( [eventData ], handler )‎

أُضيف مع الإصدار: 1.4.3.

eventData

أي شيء (وهو نوع افتراضي مُستخدَم في jQuery للإشارة إلى إمكانيَّة استخدام أي نوع)، ويُمثِّل كائنًا يحتوي على البيانات التي ستُمرَّر إلى مُعالِج الأحداث.

handler

دالة من الشكل Function( Event eventObject )‎، وتُمثِّل الدالة التي ستُنفَّذ في كل مرة يُستدعى فيها الحدث.

‎.mouseenter()‎

أُضيف مع الإصدار: 1.0، ولا يقبل هذا الشكل من التابع أي وسائط.

هذا التابع هو اختصار للتابع ‎.on( "mouseenter", handler )‎ في شكله الأول والثاني، واختصار للتابع ‎.trigger( "mouseenter" )‎ في شكله الثالث.

الحدث mouseenter في JavaScript هو خاصِّيَّة في المتصفح Internet Explorer. بسبب وجود خدمة عامة للأحداث، فستحاكي jQuery هذا الحدث لاستعماله في أي متصفح بغض النظر عن نوعه. يُرسل هذا الحدث إلى عنصر ٍعندما يدخل مؤشِّر الفأرة حيِّزه. يمكن أن تستقبل جميع عناصر HTML هذا الحدث.

انظر مثلًا إلى شيفرة HTML التالية:

<div id="outer">
  Outer
  <div id="inner">
    Inner
  </div>
</div>
<div id="other">
  Trigger the handler
</div>
<div id="log"></div>

يمكن أن يُربط معالج الحدث مع أي عنصر:

$( "#outer" ).mouseenter(function() {
 $( "#log" ).append( "<div>Handler for .mouseenter() called.</div>" );
});

عندما يدخل مؤشِّر الفأرة حدود العنصر <div> ذي المعرِّف outer، فستضاف الرسالة إلى العنصر <div id="log"‎>. يمكن أيضًا استدعاء الحدث عند الضغط على عنصر آخر:

$( "#other" ).click(function() {
 $( "#outer" ).mouseenter();
});

بعد تنفيذ هذه الشيفرة، ستُضاف الرسالة أيضًا بالضغط على "Trigger the handler".

يختلف الحدث mouseenter عن الحدث mouseover في طريقة تعامله مع انتشار الحدث (event bubbling). لو استُعمِل الحدث mouseover في المثال السابق، فسيُستدعى معالج الحدث آنذاك عند تحرك مؤشِّر الفأرة فوق العنصر Inner؛ وهذا السلوك غير محبَّذ عادةً. من جهة أخرى، يستدعي الحدث mouseenter معالجه عندما يدخل مؤشِّر الفأرة حدود العنصر نفسه فقط وليس حدود عناصره السليلة (أحفاده [descendant]) أيضًا. بناءً على ذلك، سيُستدعى معالج الحدث في المثال السابق عندما يدخل مؤشِّر الفأرة حيِّز العنصر Outer وليس العنصر Inner.

ملاحظات إضافية

لمَّا كان التابع ‎.mouseenter()‎ اختزالٌ للتابع ‎.on( "mouseenter", handler )‎، فمن الممكن استعمال ‎.off( "mouseenter" )‎ لإزالة الحدث mouseenter أي عملية معاكسة لما سبق.

أمثلة

إظهار نصوص معينة عند استدعاء الحدث mouseenter والحدث mouseover. يُطلَق الحدث mouseover عندما يتحرك مؤشِّر الفأرة داخل العنصر الابن أيضًا، بينما يُطلَق الحدث mouseenter عندما يدخل المؤشِّر حدود العنصر فقط:

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>mouseenter demo</title>
  <style>
  div.out {
    width: 40%;
    height: 120px;
    margin: 0 15px;
    background-color: #d6edfc;
    float: left;
  }
  div.in {
    width: 60%;
    height: 60%;
    background-color: #fc0;
    margin: 10px auto;
  }
  p {
    line-height: 1em;
    margin: 0;
    padding: 0;
  }
  </style>
  <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
 
<div class="out overout">
  <p>move your mouse</p>
  <div class="in overout"><p>move your mouse</p><p>0</p></div>
  <p>0</p>
</div>
 
<div class="out enterleave">
  <p>move your mouse</p>
  <div class="in enterleave"><p>move your mouse</p><p>0</p></div>
  <p>0</p>
</div>
 
<script>
var i = 0;
$( "div.overout" )
  .mouseover(function() {
    $( "p:first", this ).text( "mouse over" );
    $( "p:last", this ).text( ++i );
  })
  .mouseout(function() {
    $( "p:first", this ).text( "mouse out" );
  });
 
var n = 0;
$( "div.enterleave" )
  .mouseenter(function() {
    $( "p:first", this ).text( "mouse enter" );
    $( "p:last", this ).text( ++n );
  })
  .mouseleave(function() {
    $( "p:first", this ).text( "mouse leave" );
  });
</script>
 
</body>
</html>

مصادر