jQuery 3.3

.unbind()




jquery

.unbind (eventType [، handler]) الإرجاع: إصدار jQuery deprecated: 3.0

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

  • الإصدار: 1.0 .unbind (eventType [، معالج])

    • نوع الحدث
      اكتب: String
      سلسلة تحتوي على واحد أو أكثر من أنواع أحداث DOM ، مثل "انقر" أو "إرسال" أو أسماء أحداث مخصصة.
    • معالج
      النوع: Function ( Event eventObject)
      الوظيفة التي لن يتم تنفيذها بعد الآن.
  • الإصدار المضاف: 1.4.3 .unbind (eventType ، خطأ)

    • نوع الحدث
      اكتب: String
      سلسلة تحتوي على واحد أو أكثر من أنواع أحداث DOM ، مثل "انقر" أو "إرسال" أو أسماء أحداث مخصصة.
    • خاطئة
      اكتب: Boolean
      إلغاء ربط الدالة 'return false' المقابلة المرتبطة باستخدام .bind( eventType, false ) .
  • الإصدار المضاف: 1.0 .unbind (حدث)

  • الإصدار المضاف: 1.0 .unbind()

    • هذا التوقيع لا يقبل أي حجج.

اعتبارًا من jQuery 3.0 ، تم إيقاف .unbind() . وقد حلت محلها طريقة .off() منذ jQuery 1.7 ، لذا كان تثبيطها بالفعل.

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

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

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

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

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

var handler = function() {
  alert( "The quick brown fox jumps over the lazy dog." );
};
$( "#foo" ).bind( "click", handler );
$( "#foo" ).unbind( "click", handler );

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

$( "#foo" ).bind( "click", function() {
  alert( "The quick brown fox jumps over the lazy dog." );
});
 
// Will NOT work
$( "#foo" ).unbind( "click", function() {
  alert( "The quick brown fox jumps over the lazy dog." );
});

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

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

استخدام مساحات الأسماء

بدلاً من الاحتفاظ بالمراجع إلى المعالجات من أجل فك ارتباطها ، يمكننا تسمية الأحداث واستخدام هذه الإمكانية لتضييق نطاق إجراءاتنا غير المقنعة. كما هو موضح في المناقشة .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( "The quick brown fox jumps over the lazy dog." );
  timesClicked++;
  if ( timesClicked >= 3 ) {
    $( this ).unbind( event );
  }
});

يجب أن يأخذ المعالج في هذه الحالة معلمة ، بحيث يمكننا التقاط كائن الحدث واستخدامه لإلغاء ارتباط المعالج بعد النقرة الثالثة. يحتوي كائن الحدث على السياق الضروري لـ .unbind() لمعرفة المعالج المطلوب إزالته. هذا المثال هو أيضا مثال على الإغلاق. بما أن المعالج يشير إلى متغير 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">Does nothing...</button>
<button id="bind">Bind Click</button>
<button id="unbind">Unbind Click</button>
<div style="display:none;">Click!</div>
 
<script>
function aClick() {
  $( "div" ).show().fadeOut( "slow" );
}
$( "#bind" ).click(function() {
  $( "#theone" )
    .bind( "click", aClick )
    .text( "Can Click!" );
});
$( "#unbind" ).click(function() {
  $( "#theone" )
    .unbind( "click", aClick )
    .text( "Does nothing..." );
});
</script>
 
</body>
</html>

عرض:

لإلغاء جميع الأحداث من جميع الفقرات ، اكتب:

$( "p" ).unbind();

لإلغاء جميع أحداث النقر من جميع الفقرات ، اكتب:

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

لإلغاء ارتباط معالج واحد مُعالج سابقًا ، قم بتمرير الوظيفة كوسيطة ثانية:

var foo = function() {
  // Code to handle some kind of event
};
 
$( "p" ).bind( "click", foo ); // ... Now foo will be called when paragraphs are clicked ...
 
$( "p" ).unbind( "click", foo ); // ... foo will no longer be called.