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

من موسوعة حسوب
< jQuery
مراجعة 10:28، 23 يونيو 2018 بواسطة عبد اللطيف ايمش (نقاش | مساهمات)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)
اذهب إلى التنقل اذهب إلى البحث

‎.trigger( eventType [, extraParameters ] )‎

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

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

الوصف

تنفيذ جميع المعالجات والسلوكيات المرفقة بالعناصر المطابقة لنوع الحدث المُدخَل.

‎.trigger( eventType [, extraParameters ] )‎

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

eventType

سلسلة نصية من النوع String تحتوي على نوع حدث JavaScript، مثل click أو submit .

extraParameters

معاملات إضافية لتمريرها إلى معالج الحدث وهي تكون من النوع Array أو PlainObject.

‎.trigger( event [, extraParameters ] )‎

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

event

كائن jQuery.Event من النوع Event.

extraParameters

معاملات إضافية لتمريرها إلى معالج الحدث وهي تكون من النوع Array أو PlainObject.

تُنفَّذ أي معالجات أحداث مرتبطة بالتابع ‎.on()‎‎ أو أحد توابع الاختصار الخاصة بها عند حدوث الحدث المقابل. ويمكن مع ذلك أن تنطلق يدويًا باستخدام التابع ‎.trigger()‎‎. يؤدي استدعاء التابع ‎.trigger()‎‎ تنفيذ المعالجات بنفس ترتيبها الذي يجب أن تنفذ به إذا أنطلق الحدث بشكل طبيعي بواسطة المستخدم:

$( "#foo" ).on( "click", function() {
  alert( $( this ).text() );
});
$( "#foo" ).trigger( "click" );

بدءًا من الإصدار jQuery 1.3، تنتقل الأحداث المنطلقة بواسطة التابع ‎.trigger()‎‎ عبر شجرة DOM إلى العناصر الأب؛ يمكن أن يوقف معالج الحدث الإنتقال عن طريق إعادة القيمة false من المعالج أو استدعاء التابع ‎.stopPropagation()‎‎ على كائن الحدث المُمرر إلى الحدث. على الرغم من أن ‎.trigger()‎‎ يحاكي تنشيط الحدث، مكتملًا بكائن حدث مركب، فإنه لا يضاهي تمامًا حدثًا طبيعيًا.

لتشغيل معالجات مرتبطة بواسطة jQuery دون تشغيل الحدث الأصلي أيضًا، نستخدم التابع ‎.triggerHandler()‎‎ بدلاً من ذلك.

عندما نحدد نوع حدث مخصص باستخدام التابع ‎.on()‎‎‎‎‎، يمكن أن يصبح الوسيط الثاني للتابع ‎.trigger()‎‎ مفيدًا. على سبيل المثال، لنفترض أننا ربطنا معالجًا لحدث مُخصص custom بعنصرٍ بدلاً من حدث click الأصلي كما فعلنا أعلاه:

$( "#foo" ).on( "custom", function( event, param1, param2 ) {
  alert( param1 + "\n" + param2 );
});
$( "#foo").trigger( "custom", [ "Custom", "Event" ] );

يُمرر كائن الحدث دومًا كأول معامل إلى معالج الأحداث. يمكن أيضاً تمرير مصفوفة من الوسائط أثناء استدعاء ‎.trigger()‎‎‎‎، وستُمرر هذه المعاملات إلى المعالج نبعًا إلى كائن الحدث. بدءًا من jQuery 1.6.2، يمكن تمرير وسيطًا منفردًا سواء نصيًا أو رقميًا دون وضعه في مصفوفة.

لاحظ الفرق بين المعاملات الإضافية التي مُررت هنا والمعامل eventData المُمرر إلى التابع ‎.on()‎‎‎‎‎. كلاهما آليات لنقل المعلومات إلى معالج الأحداث، ولكن تمرير المعامل extraParameters إلى التابع ‎.trigger()‎‎ يسمح بتحديد المعلومات في وقت تشغيل الحدث، بينما تمرير الوسيط eventData إلى التابع ‎.on()‎‎ يحتاج إلى أن تكون المعلومات قد حُسِبت بالفعل في الوقت الذي يرتبط فيه المعالج.

يمكن استخدام التابع ‎.trigger()‎‎ على مجموعات jQuery التي تحتوي على كائنات JavaScript بسيطة بطريقة تشبه آلية pub/sub؛ تُستدعى أي معالجات أحداث مرتبطة بالكائن عند تشغيل الحدث.

ملاحظة: بالنسبة لكل من الكائنات العادية وكائنات DOM ما عدا الكائن window، إذا تطابق اسم الحدث المنطلِق مع اسم خاصية ما في الكائن، فسيحاول jQuery استدعاء الخاصية كتابع إذا لم يستدعي معالج الأحداث event.preventDefault()‎‎ . إذا لم يكن هذا السلوك مطلوبًا، استخدم ‎.triggerHandler()‎‎ بدلاً من ذلك.

ملاحظة: كما هو الحال مع ‎.triggerHandler()‎‎‎‎، عند استدعاء ‎.trigger()‎‎ مع اسم حدث يتطابق مع اسم خاصية في الكائن، مسبوقًا بالسابقة (on على سبيل المثال تشغيل click on window التي لها تابع onclick غير فارغ)، سيحاول jQuery استدعاء تلك الخاصية كتابع.

ملاحظة: عند التشغيل باستخدام كائن بسيط لا يشبه مصفوفة ولكن لا يزال يحتوي على خاصية length، يجب أن يُمرر الكائن داخل مصفوفة (على سبيل المثال [ { length: 1 } ] .

أمثلة

تؤدي النقرات على الزر ‎#2 إلى النقر على الزر ‎#1 أيضًا:

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>trigger مثال على التابع</title>
  <style>
  button {
    margin: 10px;
  }
  div {
    color: blue;
    font-weight: bold;
  }
  span {
    color: red;
  }
  </style>
  <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
 
<button>الزر #1</button>
<button>الزر #2</button>
<div><span>0</span> نقرات على الزر #1.</div>
<div><span>0</span> نقرات على الزر #2.</div>
 
<script>
$( "button:first" ).click(function() {
  update( $( "span:first" ) );
});
 
$( "button:last" ).click(function() {
  $( "button:first" ).trigger( "click" );
  update( $( "span:last" ) );
});
 
function update( j ) {
  var n = parseInt( j.text(), 10 );
  j.text( n + 1 );
}
</script>
 
</body>
</html>

لتقديم النموذج الأول دون استخدام الدالة submit()‎‎‎‎:

$( "form:first" ).trigger( "submit" );

لتقديم النموذج الأول دون استخدام الدالة submit()‎‎‎‎:

var event = jQuery.Event( "submit" );
$( "form:first" ).trigger( event );
if ( event.isDefaultPrevented() ) {
  // تنفيذ إجراء...
}

لتمرير بيانات عشوائية لأحد الأحداث:

$( "p" )
  .click(function( event, a, b ) {
    // عند إطلاق إحدى النقرات العادية يصبح a و b غير معرفين
    // لمشغل مثل التالي، يشير a إلى "foo" ويشير b إلى "bar"
  })
  .trigger( "click", [ "foo", "bar" ] );

لتمرير بيانات عشوائية من خلال كائن الحدث:

var event = jQuery.Event( "logged" );
event.user = "foo";
event.pass = "bar";
$( "body" ).trigger( event );

طريقة بديلة لتمرير البيانات من خلال كائن الحدث:

$( "body" ).trigger({
  type:"logged",
  user:"foo",
  pass:"bar"
});

مصادر