[Binding] ربط الإكمال التلقائي لجهاز أوك أوي باستخدام .live ()


Answers

وظيفة الإكمال التلقائي جكري أوي يضيف تلقائيا فئة "أوي-أوتوكمبليت-إنبوت" للعنصر. أود أن أوصي الربط المباشر العنصر على التركيز دون فئة "أوي-أوتوكمبليت-إنبوت" لمنع إعادة ملزمة على كل حدث كيدون داخل هذا العنصر.

$(".foo:not(.ui-autocomplete-input)").live("focus", function (event) {
    $(this).autocomplete(options);
});

تصحيح

إجابتي الآن قديمة منذ جكري 1.7، انظر تعليق ناثان ستروتز للاستخدام مع بناء الجملة. .on() .

Question

لقد بحثت في كل مكان، ولكن لا يمكنني العثور على أي مساعدة ...

لدي بعض مربعات النصوص التي يتم إنشاؤها ديناميكيا عبر جس، لذلك أنا بحاجة إلى ربط جميع الفصول الدراسية إلى الإكمال التلقائي. ونتيجة لذلك، أنا بحاجة إلى استخدام .live () الخيار الجديد.

على سبيل المثال، لربط جميع العناصر مع فئة من. فو الآن والمستقبل التي تم إنشاؤها:

$('.foo').live('click', function(){
  alert('clicked');
});

فإنه يأخذ (ويتصرف) نفس .bind (). ومع ذلك، أريد ربط إكمال تلقائي ...

هذا لا يعمل:

$('.foo').live('autocomplete', function(event, ui){
  source: 'url.php' // (surpressed other arguments)
});

كيف يمكنني استخدام .live () لربط الإكمال التلقائي؟

تحديث

شكلت بها مع فرامر:

$(function(){
  $('.search').live('keyup.autocomplete', function(){
    $(this).autocomplete({
      source : 'url.php'
    });
  });
});



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

المشكلة مع استخدام كيدون كما الحدث الذي يدعو .autocomplete() هو أنه فشل في الإكمال التلقائي لهذا الحرف الأول كتبته. استخدام التركيز هو الخيار الأفضل.

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

رمز بلدي النهائي هو كما يلي:

$(document).on('focus.autocomplete', '#myAutocomplete', function(e){
    $(this).autocomplete(autocompleteOptions);
    $(document).off('focus.autocomplete', '#myAutocomplete');
});



يمكنك فقط وضع الإكمال التلقائي داخل الحدث المباشر المدخلات، مثل هذا:

$('#input-element').live('input', function(){
  
$("#input-element").autocomplete(options);

});




لقد لاحظت أنك عدلت مشاركتك بهذه الإجابة. كان واضحا بالنسبة لي لذلك أنا نشره أدناه للآخرين. شكرا لكم.

$(function() 
{
  $('.search').live('keyup.autocomplete', function()
  { 
    $(this).autocomplete({ source : 'url.php' }); 
  });
});



للحصول على الإكمال التلقائي العمل عند تحميل حيوي ل on() الحدث المستخدمة في مسج> 1.7، وذلك باستخدام بناء الجملة ناثان ستروتز يوفر في تعليقه:

$(document).on('focus', '.my-field:not(.ui-autocomplete-input)', function (e) {
    $(this).autocomplete(options)
});

حيث .my-field هو محدد لعنصر الإدخال الإكمال التلقائي الخاص بك.




لا يمكنك. .live () يدعم أحداث جافا سكريبت الفعلية، وليس أي حدث مخصص. هذا هو القيد الأساسي لكيفية .live () يعمل.