سؤال

خذ بعين الاعتبار الكود التالي:

$("a").attr("disabled", "disabled");

في IE وFF، سيؤدي هذا إلى جعل نقاط الارتساء غير قابلة للنقر عليها، ولكن في المتصفحات المستندة إلى WebKit (Google Chrome وSafari) لا يؤدي هذا إلى أي شيء.والشيء الجميل في السمة المعوقة هو أنه يمكن إزالتها بسهولة ولا تؤثر على سمات href وonclick.

هل لديك أي اقتراحات حول كيفية الحصول على النتيجة المرجوة.يجب أن تكون الإجابات:

  • يمكن الرجوع إليه بسهولة، لأنني أرغب في تعطيل عناصر التحكم في إدخال النموذج أثناء تشغيل مكالمة AJAX.
  • يجب أن تعمل في IE، FF، وWebKit
هل كانت مفيدة؟

المحلول

أفترض أن لديك معالج حدث onclick مرتبطًا بعناصر الربط هذه.ما عليك سوى مطالبة معالج الحدث الخاص بك بالتحقق من السمة "معطل" وإلغاء الحدث إذا تم تعيينه.سيبدو معالج الحدث الخاص بك كما يلي:

$("a").click(function(event){
  if (this.disabled) {
    event.preventDefault();
  } else {
    // make your AJAX call or whatever else you want
  }
});

يمكنك أيضًا تعيين قاعدة ورقة الأنماط لتغيير المؤشر.

a[disabled=disabled] { cursor: wait; }

تحرير - تبسيط عملية التحقق من "المعطل" كما هو مقترح في التعليقات.

نصائح أخرى

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

$('a').each(function () {
    $(this).click(function (e) {
        if ($(this).attr('disabled')) {
            e.preventDefault();
            e.stopImmediatePropagation();
        }
    });
    var events = $._data ? $._data(this, 'events') : $(this).data('events');
    events.click.splice(0, 0, events.click.pop());
});

و:

a[disabled] {
    color: gray;
    text-decoration: none;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top