একটি স্ব-পরিপূর্ণতা চলে যাওয়ার পরে ইভেন্টটি কী ঘটেছে এবং কীভাবে নির্বাচিত মান পুনরুদ্ধার করতে পারে


8

আমার একটি পদ নীতি যুক্ত করে একটি নোড অ্যাড ফর্ম রয়েছে যা স্বয়ংক্রিয়রূপে উইজেট ব্যবহার করে।

আমি স্বতঃপূরণ উইজেট ব্যবহার করে ব্যবহারকারী দ্বারা ভরাট শব্দটির "জোয়ার" চাই।

উত্তর:


13

এই মুহূর্তে কোনও ইভেন্ট ট্রিগার করা হয়নি (7.৩৪ হিসাবে), তবে এই ইস্যুতে একটি প্যাচ রয়েছে যা আপনাকে এই জাতীয় কিছু ব্যবহার করতে দেবে:

$('#input-id').on('autocompleteSelect', function(event, node) {

});

বা আপনি যদি jQuery এর পুরানো সংস্করণ ব্যবহার করছেন

$('#input-id').bind('autocompleteSelect', function(event, node) {

});

nodeনির্বাচিত আইটেমটি কোথায় । আপনি tidযে বস্তুর বৈশিষ্ট্যগুলির মধ্যে একটি থেকে পেতে সক্ষম হওয়া উচিত ।


প্রতিক্রিয়াটির জন্য আপনাকে ধন্যবাদ আমি এই ব্লগ পোস্টে বর্ণিত অন্য একটি সমাধানও পেয়েছি: brockboland.com/drupaldork/2013/01/…
সেল_স্পেস

@ ক্লাইভ: অনুসন্ধানের জন্য এপিআই কি স্বতঃপূরণ? আমার এখানে একটি প্রশ্ন রয়েছে drupal.stackexchange.com/questions/286399/…
সুরজ

3

ড্রুপাল 7 এবং 8 এই মুহুর্তে কোনও কাস্টম কোড ছাড়াই jQuery স্বয়ংক্রিয়রূপে ইভেন্ট জেনারেশন সরবরাহ করে।

ড্রুপাল 7 এ, autocompleteSelectইভেন্টটি ড্রুপাল ইস্যুতে যোগ করা হয়েছে # 365241 । (ক্লাইভ তার প্রতিক্রিয়া পোস্ট করার সময় এটি অগ্রগতির কথা উল্লেখ করেছিলেন।)

ড্রুপাল 8 jQuery UI স্ব-পরিপূর্ণ উইজেট ব্যবহার করে । autocompletecloseঘটনা D7 সবচেয়ে অনুরূপ jQuery এর UI 'তে ঘটনা autocompleteSelectইভেন্ট। ডি 8-এ জিকুয়ারি ইউআই autocompleteselectইভেন্টটিও ট্রিগার করা হবে তবে এতে একটি অ্যাজাক্স কলব্যাক আপডেট হওয়া ফর্মের রাষ্ট্রীয় মানগুলি গ্রহণ করবে না। autocompletecloseকলব্যাকগুলি আপডেট ফর্মের রাষ্ট্রীয় মানগুলি সরবরাহ করে, যা সাধারণত আপনি চান।

অন্যান্য উত্তরগুলি সূচিত হিসাবে, আপনি ক্লায়েন্ট ব্রাউজারে ইভেন্টের ডেটা ব্যবহার করতে পারেন ইভেন্ট হ্যান্ডলার, বা ড্রুপাল.বিহ্যাভিয়ার্স ( ড্রুপাল D , দ্রুপাল ৮ ) এর jQuery ব্যবহার করে । Drupal এর 7 এ আপনি ব্যবহার করেন ইভেন্ট, এবং Drupal এর 8 ।autocompleteSelectautocompleteclose

আপনার পিএইচপি কোডে যদি মানটির প্রয়োজন হয় তবে একটি অ্যাজাক্স কলব্যাক ব্যবহার করা যেতে পারে। ড্রুপাল 7 এ বা দ্রুপাল 8 এ এটি কীভাবে করা যায় তার জন্য এখানে কিছু দিকনির্দেশ রয়েছে ।


1

এটি কাজ করার জন্য আমার একটি আচরণ ব্যবহার করা দরকার (ক্লাইভ দ্বারা উল্লিখিত সমস্যাটির জন্য ধন্যবাদ, এবং এই মন্তব্য: https://www.drupal.org/node/365241# কমেন্ট -9575707 ):

Drupal.behaviors.autocompleteSupervisor = {
    attach: function (context) {
      $('#edit-field-foo-und-0-target-id', context).bind('autocompleteSelect', function(event, node) {

        // Do custom stuff here...
        var entity_id = $(this).val().replace($(node).text().trim(), '').replace(/\(|\)| /g, '');

      });
    }
  };

0

ড্রুপাল 8 এ এটি সরে গেছে। আপনি নিম্নলিখিত কোড সহ কার্যকারিতা ওভাররাইড করতে পারেন।

/**
 * Handles an autocompleteselect event.
 *
 * Override the autocomplete method to add a custom event.
 *
 * @param {jQuery.Event} event
 *   The event triggered.
 * @param {object} ui
 *   The jQuery UI settings object.
 *
 * @return {bool}
 *   Returns false to indicate the event status.
 */
Drupal.autocomplete.options.select = function selectHandler(event, ui) {
  var terms = Drupal.autocomplete.splitValues(event.target.value);
  // Remove the current input.
  terms.pop();
  // Add the selected item.
  if (ui.item.value.search(',') > 0) {
    terms.push('"' + ui.item.value + '"');
  }
  else {
    terms.push(ui.item.value);
  }
  event.target.value = terms.join(', ');
  // Fire custom event that other controllers can listen to.
  jQuery(event.target).trigger('autocomplete-select');
  // Return false to tell jQuery UI that we've filled in the value already.
  return false;
}

কোডটি ওভাররাইড করে core/misc/autocomplete.js

তারপরে আপনার কোডটিতে আপনি শুনতে পারেন

var field = jQuery('<field-selector>');

var lastField = ''
field.on('autocomplete-select', function() {
    console.log("autocompleteSelect");
    // Check that field actually changed.
    if ($(this).val() != lastValue) {
      lastValue = $(this).val();
      console.log('The text box really changed this time');
    }
  })

এই ফর্মটির ওভাররাইড ব্যবহার করা সেরা অনুশীলন নয়। যদি এই জাতীয় দুটি ওভাররাইডগুলিকে কিছুটা আলাদা ইভেন্টের নাম, উদাহরণস্বরূপ, 'স্বতঃসম্পূর্ণ-নির্বাচন করুন' এবং 'স্বতঃসম্পূর্ণ নির্বাচন' সহ একটি সাইটে রাখা হয়, তবে সর্বশেষ নির্ধারিতটি অগ্রাধিকার গ্রহণ করবে এবং প্রথম ইভেন্টটি কখনই ট্রিগার হবে না। এছাড়াও, ড্রুপাল 7 এবং 8 উভয়ই কোনও অতিরিক্ত কোড ছাড়াই উপযুক্ত ইভেন্টগুলি ট্রিগার করে। আমার উত্তর দেখুন drupal.stackexchange.com/a/228150/2272
কীথম

Drupal.autocomplete.options.select = ফাংশন সিলেক্ট হ্যান্ডলার (ইভেন্ট, ইউআই) fail ব্যর্থ হয়, যখন নির্দিষ্ট পৃষ্ঠায় কোনও স্ব-পরিপূর্ণ ক্ষেত্র উপলব্ধ না থাকে। স্বয়ংক্রিয়-সম্পূর্ণ ক্ষেত্র বিদ্যমান আছে তা নিশ্চিত করতে আপনাকে অবশ্যই একটি চেক প্রয়োগ করতে হবে। অন্যথায় আপনি আপনার জেএস ব্রেক করবেন। 113: এর পরে এই ধরনের ভুলের পাবেন:> Uncaught TypeError: সম্পত্তি 'অপশন' পড়তে পারছেন না নোড-form.js এ অনির্ধারিত: 94 নোড-form.js এ
jepster
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.