الفرق بين المراجعتين ل"jQuery/unbind"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
 
سطر 14: سطر 14:
  
 
==== <code>eventType</code> ====
 
==== <code>eventType</code> ====
سلسلة من النوع [[JavaScript/String|String]] تحتوي على واحد أو أكثر من أنواع أحداث DOM، مثل "<code>click</code>" أو "<code>submit</code>" أو أسماء أحداث مخصصة.
+
سلسلة نصية من النوع [[JavaScript/String|<code>String</code>]] تحتوي على واحد أو أكثر من أنواع أحداث DOM، مثل <code>click</code> أو <code>submit</code> أو أسماء أحداث مخصصة.
  
 
==== <code>handler</code> ====
 
==== <code>handler</code> ====
الدالة التي سيتوقف تنفيذها وهي على الصورة [[JavaScript/Function|Function]]( Event eventObject )‎.
+
الدالة التي سيتوقف تنفيذها وهي على الشكل <code>[[JavaScript/Function|Function]]( Event eventObject )‎</code>.
  
 
=== <code>‎.unbind( eventType, false )‎</code> ===
 
=== <code>‎.unbind( eventType, false )‎</code> ===
سطر 23: سطر 23:
  
 
==== <code>eventType</code> ====
 
==== <code>eventType</code> ====
سلسلة من النوع [[JavaScript/String|String]] تحتوي على واحد أو أكثر من أنواع أحداث DOM، مثل "<code>click</code>" أو "<code>submit</code>" أو أسماء أحداث مخصصة.
+
سلسلة نصية من النوع [[JavaScript/String|<code>String</code>]] تحتوي على واحد أو أكثر من أنواع أحداث DOM، مثل <code>click</code> أو <code>submit</code> أو أسماء أحداث مخصصة.
  
 
==== <code>false</code> ====
 
==== <code>false</code> ====
إلغاء ربط الدالة '<code>return false</code>' المقابلة ,المرتبطة باستخدام ‎<code>.bind( eventType, false )</code>‎، وهو من النوع [[JavaScript/Boolean|Boolean]].
+
إلغاء ربط الدالة '<code>return false</code>' المقابلة والمرتبطة باستخدام ‎<code>.bind( eventType, false )</code>‎، وهو من النوع [[JavaScript/Boolean|Boolean]].
  
 
=== <code>‎.unbind( event )‎‎</code> ===
 
=== <code>‎.unbind( event )‎‎</code> ===
سطر 43: سطر 43:
 
يمكن إزالة معالجات الأحداث المرفقة مع ‎<code>[[jQuery/bind|.bind()‎]]</code> باستخدام ‎<code>.unbind()</code>‎. في أبسط الحالات، مع عدم وجود وسائط، يزيل ‎<code>.unbind()</code>‎ جميع المعالجات المتعلقة بالعناصر:<syntaxhighlight lang="jquery">
 
يمكن إزالة معالجات الأحداث المرفقة مع ‎<code>[[jQuery/bind|.bind()‎]]</code> باستخدام ‎<code>.unbind()</code>‎. في أبسط الحالات، مع عدم وجود وسائط، يزيل ‎<code>.unbind()</code>‎ جميع المعالجات المتعلقة بالعناصر:<syntaxhighlight lang="jquery">
 
$( "#foo" ).unbind();
 
$( "#foo" ).unbind();
</syntaxhighlight>يزيل هذا الإصدار المعالجات بغض النظر عن نوعها. لنكون أكثر دقة، يمكننا تمرير نوع الحدث:<syntaxhighlight lang="jquery">
+
</syntaxhighlight>يزيل هذا الإصدار المعالجات بغض النظر عن نوعها. يمكننا تمرير نوع الحدث لنكون أكثر دقة:<syntaxhighlight lang="jquery">
 
$( "#foo").unbind( "click" );
 
$( "#foo").unbind( "click" );
</syntaxhighlight>عند تحديد نوع حدث <code>click</code>، ستُزال فقط المعالجات من نوع هذا الحدث. ومع ذلك، يمكن أن يكون لهذه الطريقة تداعيات سلبية إذا كانت هناك برامج نصية أخرى يمكن أن تربط سلوكيات أخرى لنفس العنصر. عادةً ما تتطلب التطبيقات القوية والموسعة إصدار الوسيطين لهذا السبب:<syntaxhighlight lang="jquery">
+
</syntaxhighlight>عند تحديد نوع حدث <code>click</code>، ستُزال فقط المعالجات من نوع هذا الحدث. ومع ذلك، يمكن أن يكون لهذه الطريقة تداعيات سلبية إذا كانت هناك برامج نصية أخرى يمكن أن تربط سلوكيات أخرى لنفس العنصر. عادةً ما تتطلب التطبيقات الكبيرة الإصدار الذي يقبل الوسيطين لهذا السبب:<syntaxhighlight lang="jquery">
 
var handler = function() {
 
var handler = function() {
 
   alert( "أبجد هوز حطي كلمن سعفص قرشت ثخذ ضظغ." );
 
   alert( "أبجد هوز حطي كلمن سعفص قرشت ثخذ ضظغ." );
سطر 60: سطر 60:
 
   alert( "أبجد هوز حطي كلمن سعفص قرشت ثخذ ضظغ." );
 
   alert( "أبجد هوز حطي كلمن سعفص قرشت ثخذ ضظغ." );
 
});
 
});
</syntaxhighlight>على الرغم من أن الدالتين متطابقتين في المحتوى، إلا أنهما يُنشأن بشكل منفصل ولذا فإن JavaScripts حرة في الحفاظ عليها ككائنات دوال مستقلة. لإبطال معالج معين، نحتاج إلى مرجع إلى تلك الدالة وليس لدالة مختلفة تحدث لعمل الشيء نفسه.
+
</syntaxhighlight>على الرغم من أن الدالتين متطابقتين في المحتوى، إلا أنهما يُنشأن بشكل منفصل ولذا فإن JavaScript ستتعامل معها [[JavaScript/Function|ككائنات دوال]] مستقلة. لإبطال معالج معين، نحتاج إلى مرجع إلى تلك الدالة وليس لدالة مختلفة تحدث لعمل الشيء نفسه.
  
 
ملاحظة: يؤدي استخدام دالة بالوساطة (proxied) في إلغاء حدث ما على عنصر إلى فك جميع الدوال التي تعمل بالوساطة على هذا العنصر، حيث تُستخدم نفس الدالة الوسيطة لكافة الأحداث التي تعمل بالوساطة. للسماح بإزالة حدث معين، تُستخدم أسماء أصناف فريدة من نوعها في الحدث (على سبيل المثال <code>click.proxy1</code> و <code>click.proxy2</code> ) عند إرفاقها.
 
ملاحظة: يؤدي استخدام دالة بالوساطة (proxied) في إلغاء حدث ما على عنصر إلى فك جميع الدوال التي تعمل بالوساطة على هذا العنصر، حيث تُستخدم نفس الدالة الوسيطة لكافة الأحداث التي تعمل بالوساطة. للسماح بإزالة حدث معين، تُستخدم أسماء أصناف فريدة من نوعها في الحدث (على سبيل المثال <code>click.proxy1</code> و <code>click.proxy2</code> ) عند إرفاقها.
  
=== استخدام مساحات الأسماء ===
+
=== استخدام مجالات الأسماء (namespaces) ===
بدلاً من الاحتفاظ بالمراجع إلى المعالجات من أجل إزالتها، يمكننا تسمية الأحداث واستخدام هذه الإمكانية لتضييق نطاق إجراءات الإزالة. كما هو موضح في توثيق التابع ‎<code>[[jQuery/bind|.bind()]]</code>‎، تُعرَّف مساحات الأسماء باستخدام علامة النقطة ( <code>.</code> ) عند ربط معالج:<syntaxhighlight lang="jquery">
+
بدلاً من الاحتفاظ بالمراجع إلى المعالجات من أجل إزالتها، يمكننا تسمية الأحداث واستخدام هذه الإمكانية لتضييق نطاق إجراءات الإزالة. كما هو موضح في توثيق التابع ‎<code>[[jQuery/bind|.bind()]]</code>‎، تُعرَّف مجالات الأسماء باستخدام علامة النقطة ( <code>.</code> ) عند ربط معالج:<syntaxhighlight lang="jquery">
 
$( "#foo" ).bind( "click.myEvents", handler );
 
$( "#foo" ).bind( "click.myEvents", handler );
 
</syntaxhighlight>عند ارتباط معالج بهذه الطريقة، لا يزال بإمكاننا إزالته بالطريقة العادية:<syntaxhighlight lang="jquery">
 
</syntaxhighlight>عند ارتباط معالج بهذه الطريقة، لا يزال بإمكاننا إزالته بالطريقة العادية:<syntaxhighlight lang="jquery">
سطر 71: سطر 71:
 
</syntaxhighlight>ومع ذلك، فإذا أردنا تجنب التأثير على معالجات أخرى، فيمكن أن نكون أكثر تحديدًا:<syntaxhighlight lang="jquery">
 
</syntaxhighlight>ومع ذلك، فإذا أردنا تجنب التأثير على معالجات أخرى، فيمكن أن نكون أكثر تحديدًا:<syntaxhighlight lang="jquery">
 
$( "#foo" ).unbind( "click.myEvents" );
 
$( "#foo" ).unbind( "click.myEvents" );
</syntaxhighlight>يمكننا أيضًا إزالة جميع المعالجات في مساحة الاسم، بغض النظر عن نوع الحدث:<syntaxhighlight lang="jquery">
+
</syntaxhighlight>يمكننا أيضًا إزالة جميع المعالجات في مجال الاسم، بغض النظر عن نوع الحدث:<syntaxhighlight lang="jquery">
 
$( "#foo" ).unbind( ".myEvents" );
 
$( "#foo" ).unbind( ".myEvents" );
</syntaxhighlight>من المفيد بشكل خاص إرفاق مساحات الأسماء بعمليات ربط الأحداث عند تطوير المكونات الإضافية أو كتابة الشيفرات البرمجية التي قد تتفاعل مع شيفرات معالجات الأحداث الأخرى في المستقبل.
+
</syntaxhighlight>من المفيد بشكل خاص إرفاق مجالات الأسماء بعمليات ربط الأحداث عند تطوير المكونات الإضافية أو كتابة الشيفرات البرمجية التي قد تتفاعل مع شيفرات معالجات الأحداث الأخرى في المستقبل.
  
 
=== استخدام كائن الحدث ===
 
=== استخدام كائن الحدث ===
سطر 85: سطر 85:
 
   }
 
   }
 
});
 
});
</syntaxhighlight>يجب أن يأخذ المعالج في هذه الحالة معامل، بحيث يمكن التقاط كائن الحدث واستخدامه لإزالة المعالج بعد النقرة الثالثة. يحتوي كائن الحدث على السياق الضروري للتابع ‎<code>.unbind()</code>‎ لمعرفة المعالج المطلوب إزالته. هذا المثال هو أيضا مثال على الإغلاق. بما أن المعالج يشير إلى متغير <code>timesClicked</code>، والذي يُعرّف خارج الدالة، فإن زيادة المتغير لها تأثير حتى بين عمليات استدعاء المعالج.
+
</syntaxhighlight>يجب أن يأخذ المعالج في هذه الحالة معامل، بحيث يمكن التقاط كائن الحدث واستخدامه لإزالة المعالج بعد النقرة الثالثة. يحتوي كائن الحدث على السياق الضروري للتابع ‎<code>.unbind()</code>‎ لمعرفة المعالج المطلوب إزالته. هذا المثال هو أيضا مثال على تعبير مغلق (closure). بما أن المعالج يشير إلى متغير <code>timesClicked</code>، والذي يُعرّف خارج الدالة، فإن زيادة المتغير لها تأثير حتى بين عمليات استدعاء المعالج.
  
 
=== أمثلة ===
 
=== أمثلة ===
سطر 130: سطر 130:
 
</body>
 
</body>
 
</html>
 
</html>
</syntaxhighlight>لإزالة جميع الأحداث من جميع الفقرات [[HTML/p|<nowiki><p></nowiki>]]:<syntaxhighlight lang="jquery">
+
</syntaxhighlight>لإزالة جميع الأحداث من جميع الفقرات [[HTML/p|<code><nowiki><p></nowiki></code>]]:<syntaxhighlight lang="jquery">
 
$( "p" ).unbind();
 
$( "p" ).unbind();
</syntaxhighlight>لإزالة جميع أحداث النقر من جميع الفقرات [[HTML/p|<nowiki><p></nowiki>]]:<syntaxhighlight lang="jquery">
+
</syntaxhighlight>لإزالة جميع أحداث النقر من جميع الفقرات [[HTML/p|<code><nowiki><p></nowiki></code>]]:<syntaxhighlight lang="jquery">
 
$( "p" ).unbind( "click" );
 
$( "p" ).unbind( "click" );
</syntaxhighlight>لإزالة ارتباط معالج واحد سبق إرتباطه، تُمرر الدالة كوسيط ثاني:<syntaxhighlight lang="jquery">
+
</syntaxhighlight>لإزالة ارتباط معالج واحد سبق ارتباطه، تُمرر الدالة كوسيط ثاني:<syntaxhighlight lang="jquery">
 
var foo = function() {
 
var foo = function() {
 
   // شيفرة للتعامل مع نوع من الأحداث
 
   // شيفرة للتعامل مع نوع من الأحداث
سطر 145: سطر 145:
  
 
== مصادر ==
 
== مصادر ==
<span> </span>
 
 
* [http://api.jquery.com/unbind/ صفحة التابع ‎ ‎.unbind()‎‎‎‎‎‎‎‎‎‎‎‎‎في توثيق jQuery الرسمي].
 
* [http://api.jquery.com/unbind/ صفحة التابع ‎ ‎.unbind()‎‎‎‎‎‎‎‎‎‎‎‎‎في توثيق jQuery الرسمي].
 
[[تصنيف:jQuery]]
 
[[تصنيف:jQuery]]
 
[[تصنيف:jQuery Method]]
 
[[تصنيف:jQuery Method]]
 
[[تصنيف:jQuery Events]]
 
[[تصنيف:jQuery Events]]

المراجعة الحالية بتاريخ 10:54، 23 يونيو 2018

‎.unbind( eventType [, handler ] )‎

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

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

اٌُهمل مع الإصدار: 3.0.

الوصف

إزالة معالج أحداث سبق إرفاقه بالعناصر.

‎.unbind( eventType [, handler ] )‎

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

eventType

سلسلة نصية من النوع String تحتوي على واحد أو أكثر من أنواع أحداث DOM، مثل click أو submit أو أسماء أحداث مخصصة.

handler

الدالة التي سيتوقف تنفيذها وهي على الشكل Function( Event eventObject )‎.

‎.unbind( eventType, false )‎

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

eventType

سلسلة نصية من النوع String تحتوي على واحد أو أكثر من أنواع أحداث DOM، مثل click أو submit أو أسماء أحداث مخصصة.

false

إلغاء ربط الدالة 'return false' المقابلة والمرتبطة باستخدام ‎.bind( eventType, false )‎، وهو من النوع Boolean.

‎.unbind( event )‎‎

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

event

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

‎.unbind()‎

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

هذا الشكل لا يقبل أي وسائط.

توقف ‎.unbind()‎ بدءًا من الإصدار jQuery 3.0. وحل محله التابع ‎.off()‎ منذ الإصدار jQuery 1.7، لذا كان استخدامه غير محبذ بالفعل.

يمكن إزالة معالجات الأحداث المرفقة مع ‎.bind()‎ باستخدام ‎.unbind()‎. في أبسط الحالات، مع عدم وجود وسائط، يزيل ‎.unbind()‎ جميع المعالجات المتعلقة بالعناصر:

$( "#foo" ).unbind();

يزيل هذا الإصدار المعالجات بغض النظر عن نوعها. يمكننا تمرير نوع الحدث لنكون أكثر دقة:

$( "#foo").unbind( "click" );

عند تحديد نوع حدث click، ستُزال فقط المعالجات من نوع هذا الحدث. ومع ذلك، يمكن أن يكون لهذه الطريقة تداعيات سلبية إذا كانت هناك برامج نصية أخرى يمكن أن تربط سلوكيات أخرى لنفس العنصر. عادةً ما تتطلب التطبيقات الكبيرة الإصدار الذي يقبل الوسيطين لهذا السبب:

var handler = function() {
  alert( "أبجد هوز حطي كلمن سعفص قرشت ثخذ ضظغ." );
};
$( "#foo" ).bind( "click", handler );
$( "#foo" ).unbind( "click", handler );

يؤكد تمرير المعالجات عدم إزالة أي دوال أخرى عن طريق الخطأ. لاحظ أن ما يلي لن يعمل:

$( "#foo" ).bind( "click", function() {
  alert( "أبجد هوز حطي كلمن سعفص قرشت ثخذ ضظغ." );
});
 
// لن يعمل
$( "#foo" ).unbind( "click", function() {
  alert( "أبجد هوز حطي كلمن سعفص قرشت ثخذ ضظغ." );
});

على الرغم من أن الدالتين متطابقتين في المحتوى، إلا أنهما يُنشأن بشكل منفصل ولذا فإن JavaScript ستتعامل معها ككائنات دوال مستقلة. لإبطال معالج معين، نحتاج إلى مرجع إلى تلك الدالة وليس لدالة مختلفة تحدث لعمل الشيء نفسه.

ملاحظة: يؤدي استخدام دالة بالوساطة (proxied) في إلغاء حدث ما على عنصر إلى فك جميع الدوال التي تعمل بالوساطة على هذا العنصر، حيث تُستخدم نفس الدالة الوسيطة لكافة الأحداث التي تعمل بالوساطة. للسماح بإزالة حدث معين، تُستخدم أسماء أصناف فريدة من نوعها في الحدث (على سبيل المثال click.proxy1 و click.proxy2 ) عند إرفاقها.

استخدام مجالات الأسماء (namespaces)

بدلاً من الاحتفاظ بالمراجع إلى المعالجات من أجل إزالتها، يمكننا تسمية الأحداث واستخدام هذه الإمكانية لتضييق نطاق إجراءات الإزالة. كما هو موضح في توثيق التابع ‎.bind()‎، تُعرَّف مجالات الأسماء باستخدام علامة النقطة ( . ) عند ربط معالج:

$( "#foo" ).bind( "click.myEvents", handler );

عند ارتباط معالج بهذه الطريقة، لا يزال بإمكاننا إزالته بالطريقة العادية:

$( "#foo" ).unbind( "click" );

ومع ذلك، فإذا أردنا تجنب التأثير على معالجات أخرى، فيمكن أن نكون أكثر تحديدًا:

$( "#foo" ).unbind( "click.myEvents" );

يمكننا أيضًا إزالة جميع المعالجات في مجال الاسم، بغض النظر عن نوع الحدث:

$( "#foo" ).unbind( ".myEvents" );

من المفيد بشكل خاص إرفاق مجالات الأسماء بعمليات ربط الأحداث عند تطوير المكونات الإضافية أو كتابة الشيفرات البرمجية التي قد تتفاعل مع شيفرات معالجات الأحداث الأخرى في المستقبل.

استخدام كائن الحدث

يستخدم الشكل الثالث من التابع ‎.unbind()‎ عندما نرغب في ازالة معالج من داخل نفسه. على سبيل المثال، لنفترض أننا نرغب في تشغيل معالج أحداث ثلاث مرات فقط:

var timesClicked = 0;
$( "#foo" ).bind( "click", function( event ) {
  alert( "أبجد هوز حطي كلمن سعفص قرشت ثخذ ضظغ." );
  timesClicked++;
  if ( timesClicked >= 3 ) {
    $( this ).unbind( event );
  }
});

يجب أن يأخذ المعالج في هذه الحالة معامل، بحيث يمكن التقاط كائن الحدث واستخدامه لإزالة المعالج بعد النقرة الثالثة. يحتوي كائن الحدث على السياق الضروري للتابع ‎.unbind()‎ لمعرفة المعالج المطلوب إزالته. هذا المثال هو أيضا مثال على تعبير مغلق (closure). بما أن المعالج يشير إلى متغير timesClicked، والذي يُعرّف خارج الدالة، فإن زيادة المتغير لها تأثير حتى بين عمليات استدعاء المعالج.

أمثلة

يمكن ربط الأحداث بالزر الملون ثم إزالتها منه.

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>unbind demo</title>
  <style>
  button {
    margin: 5px;
  }
  button#theone {
    color: red;
    background: yellow;
  }
  </style>
  <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
 
<button id="theone">لا يحدث شيء...</button>
<button id="bind">ربط النقر</button>
<button id="unbind">إزالة النقر</button>
<div style="display:none;">انقر!</div>
 
<script>
function aClick() {
  $( "div" ).show().fadeOut( "slow" );
}
$( "#bind" ).click(function() {
  $( "#theone" )
    .bind( "click", aClick )
    .text( "يمكن النقر!" );
});
$( "#unbind" ).click(function() {
  $( "#theone" )
    .unbind( "click", aClick )
    .text( "لا يحدث شيء..." );
});
</script>
 
</body>
</html>

لإزالة جميع الأحداث من جميع الفقرات <p>:

$( "p" ).unbind();

لإزالة جميع أحداث النقر من جميع الفقرات <p>:

$( "p" ).unbind( "click" );

لإزالة ارتباط معالج واحد سبق ارتباطه، تُمرر الدالة كوسيط ثاني:

var foo = function() {
  // شيفرة للتعامل مع نوع من الأحداث
};
 
$( "p" ).bind( "click", foo ); // ... الآن سيستدعى foo عند النقر فوق الفقرات ...
 
$( "p" ).unbind( "click", foo ); // ... لن يستدعى foo بعد الآن.

مصادر