jQuery ইউআই অ্যাকর্ডিয়ন যা একাধিক বিভাগ খোলা রাখে?


93

আমি বোকা হতে পারি, তবে আপনি কীভাবে jQuery UI এর অ্যাকর্ডিয়নে একাধিক বিভাগ রাখবেন? ডেমোগুলির সমস্তই একবারে একটি করে খোলা থাকে ... আমি একটি সঙ্কুচিত মেনু টাইপ সিস্টেম খুঁজছি।



ঠিক আছে, আপনার প্লাগইন ঠিক নিখুঁত! অনেক অনেক ধন্যবাদ, বন্ধু!
সেক্সিবিস্ট

উত্তর:


94

এটি মূলত অ্যাকর্ডিয়নের জন্য jQuery UI ডকুমেন্টেশনে আলোচিত হয়েছিল :

দ্রষ্টব্য: আপনি যদি একসাথে একাধিক বিভাগ খুলতে চান তবে অ্যাকর্ডিয়ানটি ব্যবহার করবেন না

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

jQuery(document).ready(function(){
  $('.accordion .head').click(function() {
      $(this).next().toggle();
      return false;
  }).next().hide();
});

বা অ্যানিমেটেড:

jQuery(document).ready(function(){
  $('.accordion .head').click(function() {
      $(this).next().toggle('slow');
      return false;
  }).next().hide();
});

"আমি বোকা হতে পারি" - আপনি যদি ডকুমেন্টেশনটি না পড়েন তবে আপনি বোকা নন, তবে আপনার যদি সমস্যা হয়, তবে এটি সাধারণত সমাধান খুঁজে পেতে দ্রুত হয়।


9
এই সমাধানটি অ্যাকর্ডিয়ান স্টাইলিংয়ের কোনও কাজ করে না।
ফরেষ্টো

12
তদুপরি, এটি মোটেও প্রশ্নের কোনও সমাধান নয়। অ্যাকর্ডিয়ান ডকুমেন্ট এবং বিকল্পগুলির তালিকা, ইভেন্টগুলি ইত্যাদি খুব খারাপ just এবং ব্যবহারকারীকে বলার পরিবর্তে "যদি আপনার কাছে বিকল্প না থাকে তবে এটি ব্যবহার করবেন না!" তাদের বলা উচিত "দুঃখিত যে এর জন্য এখনও কোনও বিকল্প নেই, তবে আমরা যে কোনও অবদানকারীকে স্বাগত জানাই যা আমাদের দুর্দান্ত প্লাগইনে কার্যকারিতা যুক্ত করে"
আর্টগ্রোহে

আমি উদ্ধৃত পাঠ্যটি ডকুমেন্টেশন থেকে সরানো হয়েছে। আমি একটি সংরক্ষণাগারিত সংস্করণে একটি লিঙ্ক যুক্ত করেছি।
MvanGeest

4
মনে রাখবেন যে jQuery ইউআই অ্যাকর্ডিয়ান প্রকৃত অ্যাকর্ডিয়ানের প্রভাব তৈরি করার চেয়ে আরও বেশি কিছু করে। এটি স্ক্রিন পাঠকদের জন্য প্রচুর অ্যাক্সেসযোগ্যতার মার্কআপ যুক্ত করে।
ব্রায়ান

4
এটি কোনও অর্থবোধ করে না। সংগীতজ্ঞের বাহু যদি দূরে থাকে তবে অ্যাসোরিয়ানের সমস্ত আবেদনগুলি খোলা থাকতে পারে, যদি যন্ত্রের অর্ধেকগুলি একসাথে থাকে বা এর মধ্যে কিছু থাকে তবে সমস্ত আবেদন বন্ধ হয়ে যায়। যদি শব্দগুলির কোনও অর্থ হয়, তবে অ্যাকর্ডিয়ান সফ্টওয়্যার ইউআই নিয়ন্ত্রণের জন্য খোলা এবং বন্ধ প্যানেলের কোনও সংমিশ্রণের অনুমতি দেওয়া উচিত।
বার্ডাস

119

বেশ সহজ:

<script type="text/javascript">
    (function($) {
        $(function() {
            $("#accordion > div").accordion({ header: "h3", collapsible: true });
        })
    })(jQuery);
</script>

<div id="accordion">
    <div>
        <h3><a href="#">First</a></h3>
        <div>Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.</div>
    </div>
    <div>
        <h3><a href="#">Second</a></h3>
        <div>Phasellus mattis tincidunt nibh.</div>
    </div>
    <div>
        <h3><a href="#">Third</a></h3>
        <div>Nam dui erat, auctor a, dignissim quis.</div>
    </div>
</div>

4
দুর্দান্ত কাজ করেছেন আমি create: function(event) { $(event.target).accordion( "activate", false ); }ভেঙে পড়া শুরু করতে যোগ ।
ফরেস্টো

4
অসাধারণ. এটা আপনার জন্য কাজ করে খুশি। :) আমি যতটা সম্ভব জিনিস সহজ রাখতে পছন্দ করি।
2upmedia

7
jquery-ui 1.10 এ, ভেঙে পড়া শুরু করতে, তার পরিবর্তে create: function(event) { $(event.target).accordion( "activate", false ); }আপনি বিকল্পটি সেট করেছেন:{active: false}
দামকো

16
(ফেসপাম) প্রতিটি ব্লকের জন্য পৃথক অ্যাকর্ডিয়ান।
পল আনেকোভ

4
এখানে jsFiddle আমি এটি পরীক্ষা করতাম jsfiddle.net/txo8rx3q/1 আমি প্রসারিত হওয়ার সময় নির্বাচিত খুঁজছেন এমন একটি খোলা অ্যাকর্ডিয়ান বিভাগ বন্ধ করতে কিছু সিএসএস যুক্ত করেছি
ম্যাথু লক

78

এটি একটি অনুরূপ থ্রেডে পোস্ট করেছেন, তবে এটি এখানেও প্রাসঙ্গিক হতে পারে বলে মনে করেন।

JQuery-UI অ্যাকর্ডিয়ানের একক উদাহরণ সহ এটি অর্জন করা

অন্যরা যেমন উল্লেখ করেছে, Accordionউইজেটের কাছে সরাসরি এটি করার জন্য একটি এপিআই বিকল্প নেই। যাইহোক, যদি কোনও কারণে আপনাকে অবশ্যই উইজেটটি ব্যবহার করতে হয় (যেমন আপনি একটি বিদ্যমান সিস্টেম বজায় রেখেছেন), beforeActivateউইজেটের ডিফল্ট আচরণকে নষ্ট এবং অনুকরণ করার জন্য ইভেন্ট হ্যান্ডলার বিকল্পটি ব্যবহার করে এটি অর্জন করা সম্ভব ।

উদাহরণ স্বরূপ:

$('#accordion').accordion({
    collapsible:true,

    beforeActivate: function(event, ui) {
         // The accordion believes a panel is being opened
        if (ui.newHeader[0]) {
            var currHeader  = ui.newHeader;
            var currContent = currHeader.next('.ui-accordion-content');
         // The accordion believes a panel is being closed
        } else {
            var currHeader  = ui.oldHeader;
            var currContent = currHeader.next('.ui-accordion-content');
        }
         // Since we've changed the default behavior, this detects the actual status
        var isPanelSelected = currHeader.attr('aria-selected') == 'true';

         // Toggle the panel's header
        currHeader.toggleClass('ui-corner-all',isPanelSelected).toggleClass('accordion-header-active ui-state-active ui-corner-top',!isPanelSelected).attr('aria-selected',((!isPanelSelected).toString()));

        // Toggle the panel's icon
        currHeader.children('.ui-icon').toggleClass('ui-icon-triangle-1-e',isPanelSelected).toggleClass('ui-icon-triangle-1-s',!isPanelSelected);

         // Toggle the panel's content
        currContent.toggleClass('accordion-content-active',!isPanelSelected)    
        if (isPanelSelected) { currContent.slideUp(); }  else { currContent.slideDown(); }

        return false; // Cancels the default action
    }
});

একটি jsFizz ডেমো দেখুন


6
ধন্যবাদ! আপনার সেরা বিদ্যমান পরিবেশের কোনও পরিবর্তন করার প্রয়োজন না হওয়ায় এটিই সেরা সমাধান।
আর্টগ্রোহ

এটি প্রয়োজন jQuery এর UI 'তে 1.9.0+ (Drupal এর 7 1.8.7 সঙ্গে আটকে থাকে)
Capi Etheriel

4
আমি বিশ্বাস করি সক্রিয় শ্রেণি পরিবর্তিত হয়েছেui-accordion-header-active
টিম ভার্মেলেন

আমার জন্য দুর্দান্ত কাজ করেছে, কম পরিমাণে রিফ্যাক্টরিং :-)
ডার্কলকি

ভাল সমাধান, কেবল ইস্যু হ'ল এই সমাধানটি আইকন বিকল্পটি গ্রহণ করবে না :-)
ট্যাচইনস

21

নাকি আরও সহজ?

<div class="accordion">
    <h3><a href="#">First</a></h3>
    <div>Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.</div>
</div>    
<div class="accordion">
    <h3><a href="#">Second</a></h3>
    <div>Phasellus mattis tincidunt nibh.</div>
</div>         
<div class="accordion">
    <h3><a href="#">Third</a></h3>
    <div>Nam dui erat, auctor a, dignissim quis.</div>
</div>
<script type="text/javascript">
    $(".accordion").accordion({ collapsible: true, active: false });
</script>

এই দুর্দান্ত ইমো। সহজ সমাধান এবং এটি এমন সমস্যাগুলির সমাধান করেছে যেগুলি আমি বড় আকারের অ্যাকর্ডিয়ান আইটেমগুলির পারফরম্যান্সের সাথে ছিল। আশ্চর্যরূপে অ্যাকর্ডিয়েন্সের একটি বড় সেট ভাল সম্পাদন করে tial ধন্যবাদ!
কোড নভিটিয়েট

14

আমি একটি jQuery প্লাগইন করেছি যা jQuery UI অ্যাকর্ডিয়ানের অনুরূপ এবং সমস্ত ট্যাব \ বিভাগগুলি উন্মুক্ত রাখতে পারে

আপনি এখানে পেতে পারেন

http://anasnakawa.wordpress.com/2011/01/25/jquery-ui-mult-open-accordion/

একই মার্কআপ নিয়ে কাজ করে

<div id="multiOpenAccordion">
        <h3><a href="#">tab 1</a></h3>
        <div>Lorem ipsum dolor sit amet</div>
        <h3><a href="#">tab 2</a></h3>
        <div>Lorem ipsum dolor sit amet</div>
</div>

জাভাস্ক্রিপ্ট কোড

$(function(){
        $('#multiOpenAccordion').multiAccordion();
       // you can use a number or an array with active option to specify which tabs to be opened by default:
       $('#multiOpenAccordion').multiAccordion({ active: 1 });
       // OR
       $('#multiOpenAccordion').multiAccordion({ active: [1, 2, 3] });

       $('#multiOpenAccordion').multiAccordion({ active: false }); // no opened tabs
});

আপডেট: ডিফল্ট সক্রিয় ট্যাব বিকল্প সমর্থন করতে প্লাগইন আপডেট করা হয়েছে

আপডেট: এই প্লাগইনটি এখন হ্রাস করা হয়েছে।


দুর্দান্ত কখনও সমাধান।
ত্রিমনন্ত্র সফটওয়্যার সলিউশন

6

আসলে কিছুক্ষণের জন্য এর সমাধানের জন্য ইন্টারনেট অনুসন্ধান করা হয়েছিল। এবং গৃহীত উত্তরটি "বই দ্বারা" উত্তরটি দেয়। তবে আমি এটি মানতে চাইনি তাই অনুসন্ধান চালিয়ে গিয়েছি এবং এটি খুঁজে পেয়েছি:

http://jsbin.com/eqape/1601/edit - লাইভ উদাহরণ

এই উদাহরণটি সঠিক শৈলীতে টান দেয় এবং একই সাথে অনুরোধ করা কার্যকারিতা যুক্ত করে, প্রতিটি শিরোলেখের ক্লিকটিতে আপনার নিজস্ব কার্যকারিতা যুক্ত করতে লিখতে স্থান দিয়ে সম্পূর্ণ করুন। একাধিক ডিভগুলি "h3" s এর মধ্যে থাকতে দেয়।

 $("#notaccordion").addClass("ui-accordion ui-accordion-icons ui-widget ui-helper-reset")
  .find("h3")
    .addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-top ui-corner-bottom")
    .hover(function() { $(this).toggleClass("ui-state-hover"); })
    .prepend('<span class="ui-icon ui-icon-triangle-1-e"></span>')
    .click(function() {
      $(this).find("> .ui-icon").toggleClass("ui-icon-triangle-1-e ui-icon-triangle-1-s").end()


        .next().toggleClass("ui-accordion-content-active").slideToggle();
        return false;
    })
    .next()
      .addClass("ui-accordion-content  ui-helper-reset ui-widget-content ui-corner-bottom")
      .hide();

এইচটিএমএল কোড:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Toggle Panels (not accordion) using ui-accordion  styles</title>

<!-- jQuery UI  |  http://jquery.com/  http://jqueryui.com/  http://jqueryui.com/docs/Theming  -->
<style type="text/css">body{font:62.5% Verdana,Arial,sans-serif}</style>
<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.1/themes/base/jquery-ui.css" rel="stylesheet" type="text/css" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.1/jquery-ui.min.js"></script>


</head>
<body>

<h1>Toggle Panels</h1>
<div id="notaccordion">
  <h3><a href="#">Section 1</a></h3>
  <div class="content">
    Mauris mauris  ante, blandit et, ultrices a, suscipit eget, quam. Integer
    ut neque. Vivamus  nisi metus, molestie vel, gravida in, condimentum sit
    amet, nunc. Nam a  nibh. Donec suscipit eros. Nam mi. Proin viverra leo ut
    odio. Curabitur  malesuada. Vestibulum a velit eu ante scelerisque vulputate.
  </div>
  <h3><a href="#">Section 2</a></h3>
  <div>
    Sed non urna. Donec et ante. Phasellus eu ligula.  Vestibulum sit amet
    purus. Vivamus hendrerit, dolor at aliquet laoreet,  mauris turpis porttitor
    velit, faucibus interdum tellus libero ac justo.  Vivamus non quam. In
    suscipit faucibus urna.
  </div>
  <h3><a href="#">Section 3</a></h3>
  <div class="top">
  Top top top top
  </div>
  <div class="content">
    Nam enim risus, molestie et, porta ac, aliquam ac,  risus. Quisque lobortis.
    Phasellus pellentesque purus in massa. Aenean in pede.  Phasellus ac libero
    ac tellus pellentesque semper. Sed ac felis. Sed  commodo, magna quis
    lacinia ornare, quam ante aliquam nisi, eu iaculis leo  purus venenatis dui.
    <ul>
      <li>List item one</li>
      <li>List item two</li>
      <li>List item  three</li>
    </ul>
  </div>
  <div class="bottom">
  Bottom bottom bottom bottom
  </div>
  <h3><a href="#">Section 4</a></h3>
  <div>
    Cras dictum. Pellentesque habitant morbi tristique  senectus et netus
    et malesuada fames ac turpis egestas. Vestibulum ante  ipsum primis in
    faucibus orci luctus et ultrices posuere cubilia Curae;  Aenean lacinia
    mauris vel est.
    Suspendisse eu nisl. Nullam ut libero. Integer  dignissim consequat lectus.
    Class aptent taciti sociosqu ad litora torquent per  conubia nostra, per
    inceptos himenaeos.
  </div>
</div>

</body>
</html>`

5

আমি একটি জটিল সমাধান পেয়েছি। একই ফাংশনটি দু'বার কল করতে দেয় তবে বিভিন্ন আইডি দিয়ে।

JQuery কোড

$(function() {
    $( "#accordion1" ).accordion({
        collapsible: true, active: false, heightStyle: "content"
    });
    $( "#accordion2" ).accordion({
        collapsible: true, active: false, heightStyle: "content"
    });
});

এইচটিএমএল কোড

<div id="accordion1">
    <h3>Section 1</h3>
    <div>Section one Text</div>
</div>
<div id="accordion2">   
    <h3>Section 2</h3>
    <div>Section two Text</div>
</div>

4
আপনি উপর ভিত্তি করে একটি একক নির্বাচক সাথে যাচ্ছেন বন্ধ আরও ভাল হয় classযেমন অন্যদের দ্বারা প্রস্তাবিত, এই তারপর মানে আপনি নিজেকে পুনরাবৃত্তি না ( শুকনো )
Scotty.NET

4

সরল, একাধিক অ্যাকর্ডিয়ান ডিভ তৈরি করুন যার প্রতিটি একটি অ্যাঙ্কর ট্যাগ উপস্থাপন করে:

<div>
<div class="accordion">
<a href = "#">First heading</a>
</div>
<div class="accordion">
<a href = "#">First heading</a>
</div>
</div>

এটি কিছু মার্কআপ যুক্ত করে। তবে প্রো এর মতো কাজ করে ...


4

সরল: অ্যাকর্ডিয়নটিকে একটি শ্রেণিতে সক্রিয় করুন এবং তারপরে এটি দিয়ে ডিভগুলি তৈরি করুন, যেমন অ্যাকর্ডিয়ানের বহুগুণ উদাহরণ।

এটার মত:

জেএস

$(function() {
    $( ".accordion" ).accordion({
        collapsible: true,
        clearStyle: true,
        active: false,
    })
});

এইচটিএমএল

<div class="accordion">
    <h3>Title</h3>
    <p>lorem</p>
</div>
<div class="accordion">
    <h3>Title</h3>
    <p>lorem</p>
</div>
<div class="accordion">
    <h3>Title</h3>
    <p>lorem</p>
</div>

https://jsfiddle.net/sparhawk_odin/pm91Wz3/


4
আমি সমস্ত উত্তর থ্রেডে চেষ্টা করেছি এবং এটি সবচেয়ে ভাল কাজ করে। সর্বশেষ jquery এবং jqueryUI এর সাথে এখন অন্যান্য সমাধানগুলির সাথে স্টাইলিংয়ের প্রচুর সমস্যা রয়েছে। এখানে 2017 আপডেট jsfiddle.net/rambutan2000/eqbbgb7g
জর্ডি

@ জর্ডি আমি খুশি যে এটি সাহায্য করেছে।
জিওভান ক্রুজ

2

কেবল অ্যাকর্ডিয়ানের প্রতিটি বিভাগকে তার নিজস্ব অ্যাকর্ডিয়ান হিসাবে কল করুন। সক্রিয়: এন প্রথমটির জন্য 0 হবে (সুতরাং এটি প্রদর্শিত হবে) এবং বাকি অংশের জন্য 1, 2, 3, 4 ইত্যাদি। যেহেতু প্রত্যেকে এটির নিজস্ব অ্যাকর্ডিয়ান, সেগুলির কেবলমাত্র 1 টি বিভাগ থাকবে এবং বাকীটি শুরু করার জন্য ধসে যাবে।

$('.accordian').each(function(n, el) {
  $(el).accordion({
    heightStyle: 'content',
    collapsible: true,
    active: n
  });
});

নোট করুন এটি ইতিমধ্যে নীচে 2 আপমিডিয়ার উত্তরে
বোয়াজ

2

এমনকি সহজ, এটি প্রতিটি লি ট্যাগের শ্রেণীর বৈশিষ্ট্যে লেবেলযুক্ত এবং অ্যাকর্ডিয়েনটি আরম্ভ করার জন্য প্রতিটি লি মাধ্যমে লুপ করার জন্য jquery রয়েছে।


1

JQuery-UI অ্যাকর্ডিয়ান ছাড়া, কেউ কেবল এটি করতে পারেন:

<div class="section">
  <div class="section-title">
    Section 1
  </div>
  <div class="section-content">
    Section 1 Content: Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.
  </div>
</div>

<div class="section">
  <div class="section-title">
    Section 2
  </div>
  <div class="section-content">
    Section 2 Content: Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.
  </div>
</div>

এবং জেএস

$( ".section-title" ).click(function() {
    $(this).parent().find( ".section-content" ).slideToggle();
});

https://jsfiddle.net/gayan_dasanayake/6ogxL7nm/


0

jquery-ui খুলুন - *। জেএস

অনুসন্ধান $.widget( "ui.accordion", {

_eventHandler: function( event ) {ভিতরে খুঁজে

পরিবর্তন

var options = this.options,             active = this.active,           clicked = $( event.currentTarget ),             clickedIsActive = clicked[ 0 ] === active[ 0 ],             collapsing = clickedIsActive && options.collapsible,            toShow = collapsing ? $() : clicked.next(),             toHide = active.next(),             eventData = {
                oldHeader: active,
                oldPanel: toHide,
                newHeader: collapsing ? $() : clicked,
                newPanel: toShow            };

প্রতি

var options = this.options,
    clicked = $( event.currentTarget),
    clickedIsActive = clicked.next().attr('aria-expanded') == 'true',
    collapsing = clickedIsActive && options.collapsible;

    if (clickedIsActive == true) {
        var toShow = $();
        var toHide = clicked.next();
    } else {
        var toShow = clicked.next();
        var toHide = $();

    }
    eventData = {
        oldHeader: $(),
        oldPanel: toHide,
        newHeader: clicked,
        newPanel: toShow
    };

আগে active.removeClass( "ui-accordion-header-active ui-state-active" );

যোগ if (typeof(active) !== 'undefined') {এবং বন্ধ}

উপভোগ করুন


-1

আপনি কেবল প্রতিটি () ফাংশন jquery ব্যবহার করেন;

$(function() {
    $( ".selector_class_name" ).each(function(){
        $( this ).accordion({
          collapsible: true, 
          active:false,
          heightStyle: "content"
        });
    });
});
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.