আচরণের সাথে সংযুক্ত ফাংশনগুলিকে দু'বার সংযুক্ত হতে কীভাবে প্রতিরোধ করবেন?


11

আমার এমন আচরণ রয়েছে যা onকিছু চেকবক্সগুলিতে যুক্ত করে।

(function($) { 
  Drupal.behaviors.mymodule = {
    attach: function (context, settings) {

      $('.skip-line', context).on('change', function(){
        // some code
        if ( confirm(Drupal.t('Apply to all languages?')) ) {
          // applying...
        }
      });
    }
  };
})(jQuery);

এটি খুব ভালভাবে কাজ করে, তবে চেকবক্সগুলি এজেএক্স-বোঝা অংশে রয়েছে। আমি যদি ফর্মটির সেই অংশটি পুনরায় লোড করি তবে তাদের উপর ক্লিক করলে দু'বার নিশ্চিতকরণ পপআপ হয়। এখন, আমি জানি যে এটি প্রথমবার বলা হলে এটি ভিতরে ফাংশনটি পরীক্ষা করতে পারি তবে এটি একবারে আমার উপাদানটিতে যুক্ত হয়েছে কিনা তা নিশ্চিত করতে পছন্দ করব এবং এইভাবে কেবল একবার ডাকা হবে। আমি এটা কিভাবে করবো?

উত্তর:


20

once()ফাংশন যা যেমন সঙ্গে আপনাকে সাহায্য করবে

(function($) { 
   Drupal.behaviors.mymodule = {
    attach: function (context, settings) {

      $('.skip-line', context).once('mymodule').on('change', function(){
        // some code
        if ( confirm(Drupal.t('Apply to all languages?')) ) {
          // applying...
        }
      });
    }
  };
})(jQuery);

বহু উল্লেখের মধ্যে একটি


2
ধন্যবাদ। কবজির মতো কাজ করেছেন। আমি অনুমান করি যে আমি যখন গুগলকে সঠিকভাবে জিজ্ঞাসা করতে ব্যর্থ হই তখন এই মুহুর্তগুলির মধ্যে একটি এটি। আমি দুইবার প্রতিরোধ এবং একাধিক প্রতিরোধ সম্পর্কে জিজ্ঞাসা করেছি । যদি কেবল আমি একবার এটি করার বিষয়ে জিজ্ঞাসা করেছি ...
মূত

1
@ Molot কিন্তু আপনার মন্তব্যের ধন্যবাদ সূচীবদ্ধ করা হচ্ছে, আমি এটা পাওয়া যখন আমি আটকান একাধিক :-D অনুসন্ধান
frazras

7

এটি অর্জনের জন্য আপনাকে একবার () ফাংশনটি ব্যবহার করতে হবে। এই পৃষ্ঠা থেকে

Drupal.behaviors.myModule = {
  attach: function (context, settings) {
    $('element', context).once('myModule', function () {
     // any behavior is now applied once
    });
  }
};

ফাংশনটিতে পাস করা স্ট্রিং "মাইমডুল" jQuery নির্বাচনের সাথে মেলে এমন উপাদানগুলির উপর একটি চিহ্নিতকারী হিসাবে সেট করা হয়েছে, সুতরাং পরের বার একবার এটি বলা হলে সেগুলি উপেক্ষা করে। আপনি যদি বিভিন্ন উদ্দেশ্যে একবারে একাধিকবার ফাংশন কল করেন তবে একই স্ট্রিংটি ব্যবহার করবেন না অন্যথায় আপনি এর উদ্দেশ্যকে পরাস্ত করতে পারেন।


আপনার ব্যাখ্যার জন্য আপনাকে ধন্যবাদ :) ক্লাইভের উত্তর গ্রহণ করা হয়েছে কারণ তার কোডটি সরাসরি আমার পক্ষে কাজ করেছিল এবং আপনি তা করেন নি তবে আমি আপনার বিবরণটি আরও ভাল পছন্দ করি।
Mołot

2

ফ্রেজারের উত্তরে প্রসারিত এমন একটি উদাহরণ এখানে:

var searchPagesFoundationAccordionInit = false;
Drupal.behaviors.searchPagesFoundationAccordionInit = {
  attach: function (context, settings) {
    // Attempt to resolve behavior being called multiple times per page load.
    if (context !== document) {
      return;
    }
    if (!searchPagesFoundationAccordionInit) {
      searchPagesFoundationAccordionInit = true;
    }
    else {
      return;
    }

    // Check if component exists.
    if ($('.view-style--search-page .search-section__sidebar .accordion').length > 0) {
     // Code here.
    }
  }
};

এই সমাধানটি আমার পক্ষে কাজ করেছিল। ক্রিয়নের সাথে আমার কিছু উপাদান লিঙ্ক করার দরকার নেই। আমাকে কেবল একটি ফাংশন চালাতে হবে। Drupal.behaviors.checkOnce = { attach: function (context, settings) { if (context === document) { check(); } function check() { //code } } };এক্ষেত্রে check()ফাংশনটি একবারে চলবে, যখন প্রসঙ্গটি হবেdocument
ভাদিম সুদারিকভ

1

আপনি এটিও করতে পারেন:

(function ($, Drupal, drupalSettings) {
    'use strict';
Drupal.behaviors.someThing = {
        attach: function (context) {
            if (context === document) {
               console.log('called inside'); // Once <-- 
            }
            console.log('called outside'); // can be manny manny  <-- 
         },
    };
})(jQuery, Drupal, drupalSettings);

দুর্দান্ত এটি আমার জন্য কাজ করে
মাহতাব আলম

0

একবারে সঞ্চালিত ফাংশনটি এখানে রাখার আরও একটি উপায়:

(function($, Drupal) {

  var initialized;

  function init() {
    if (!initialized) {
      initialized = true;
      // Add your one-time only code here
    }
  }

  Drupal.behaviors.someKey = {
    attach: function() {
      init();
    }
  };

}(jQuery, Drupal));

সূত্র: https://www.drupal.org/forum/support/module-development-and-code-questions/2018-06-15/run-js-funtion-once-not-attach-once#comment-12654121

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.