[ Príspevkov: 3 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
jQuery list plugin

Registrovaný: 21.02.07
Prihlásený: 29.06.21
Príspevky: 150
Témy: 59 | 59
Bydlisko: Prievidza
NapísalOffline : 06.11.2016 17:33 | jQuery list plugin

Ahojte potrebujem poradit s problemom nad ktorym si uz dlho lamem hlavu a nedari sa mi to vyriesit. Je mi jasne ze sa to da viac sposobom vyriesit tak za aku kolvek radu som vam vdacny. :)

Zacnem takto:

Na web potrebujem mat aj pole select (dajme mu name="pole[]") potrebujem to ako pole nakolko vedla selectu bude tlacitko ktore prida rovnaky select aby bolo mozne vybrat viac hodnot. Toto vsetko mam vyriesene. Problem nastal v tom ked som dostal za ulohu ten select nastylovat aj hover efect na option a kedze tak lahko sa to cez CSS neda ovplivnit musel som ten select prerobit na LIST a tu nastava problem. Pouzil som jQuery plugin SimpleDropDownEffects ktory mi z toho selectu spravi list. Pomocou css som ho nastyloval vsetko funguje az do momentu kedy dam pridat dalsi select ten pridavam tymto kodom

Kód:
$('.input2').click(function() {
            original_managed.clone().appendTo( "#clone_managed" );
        });


select sa pekne zobrazi avsak neda sa na neho kliknut ani sa nerozroluje proste jQuery ho nenacita ako zonu kliku stale funguje len ten matersky select Tu prikladam kod z toho pluginu cast ktora by mala ovladat clik som oznacil (teda aspon si myslim ze je to ona) ale neviem ako to upravit aby reagovala aj na ten klik tych clonov.

Kód:
/**
 * jquery.dropdown.js v1.0.0
 * http://www.codrops.com
 *
 * Licensed under the MIT license.
 * http://www.opensource.org/licenses/mit-license.php
 *
 * Copyright 2012, Codrops
 * http://www.codrops.com
 */
;( function( $, window, undefined ) {

   'use strict';

   $.DropDown = function( options, element ) {
      this.$el = $( element );
      this._init( options );
   };

   // the options
   $.DropDown.defaults = {
      speed : 300,
      easing : 'ease',
      gutter : 0,
      // initial stack effect
      stack : true,
      // delay between each option animation
      delay : 0,
      // random angle and positions for the options
      random : false,
      // rotated [right||left||false] : the options will be rotated to thr right side or left side.
      // make sure to tune the transform origin in the stylesheet
      rotated : false,
      // effect to slide in the options. value is the margin to start with
      slidingIn : false,
      onOptionSelect : function(opt) { return false; }
   };

   $.DropDown.prototype = {

      _init : function( options ) {

         // options
         this.options = $.extend( true, {}, $.DropDown.defaults, options );
         this._layout();
         this._initEvents();

      },
      _layout : function() {

         var self = this;
         this.minZIndex = 1000;
         var value = this._transformSelect();
         this.opts = this.listopts.children( 'li' );
         this.optsCount = this.opts.length;
         this.size = { width : this.dd.width(), height : this.dd.height() };
         
         var elName = this.$el.attr( 'name' ), elId = this.$el.attr( 'id' ),
            inputName = elName !== undefined ? elName : elId !== undefined ? elId : 'cd-dropdown-' + ( new Date() ).getTime();

         this.inputEl = $( '<input type="hidden" name="' + inputName + '" value="' + value + '"></input>' ).insertAfter( this.selectlabel );
         
         this.selectlabel.css( 'z-index', this.minZIndex + this.optsCount );
         this._positionOpts();
         if( Modernizr.csstransitions ) {
            setTimeout( function() { self.opts.css( 'transition', 'all ' + self.options.speed + 'ms ' + self.options.easing ); }, 25 );
         }

      },
      _transformSelect : function() {

         var optshtml = '', selectlabel = '', value = -1;
         this.$el.children( 'option' ).each( function() {

            var $this = $( this ),
               val = isNaN( $this.attr( 'value' ) ) ? $this.attr( 'value' ) : Number( $this.attr( 'value' ) ) ,
               classes = $this.attr( 'class' ),
               selected = $this.attr( 'selected' ),
               label = $this.text();

            if( val !== -1 ) {
               optshtml +=
                  classes !== undefined ?
                     '<li data-value="' + val + '"><span class="' + classes + '">' + label + '</span></li>' :
                     '<li data-value="' + val + '"><span>' + label + '</span></li>';
            }

            if( selected ) {
               selectlabel = label;
               value = val;
            }

         } );

         this.listopts = $( '<ul/>' ).append( optshtml );
         this.selectlabel = $( '<span/>' ).append( selectlabel );
         this.dd = $( '<div class="cd-dropdown"/>' ).append( this.selectlabel, this.listopts ).insertAfter( this.$el );
         this.$el.remove();

         return value;

      },
      _positionOpts : function( anim ) {

         var self = this;

         this.listopts.css( 'height', 'auto' );
         this.opts
            .each( function( i ) {
               $( this ).css( {
                  zIndex : self.minZIndex + self.optsCount - 1 - i,
                  top : self.options.slidingIn ? ( i + 1 ) * ( self.size.height + self.options.gutter ) : 0,
                  left : 0,
                  marginLeft : self.options.slidingIn ? i % 2 === 0 ? self.options.slidingIn : - self.options.slidingIn : 0,
                  opacity : self.options.slidingIn ? 0 : 1,
                  transform : 'none'
               } );
            } );

         if( !this.options.slidingIn ) {
//            this.opts
//               .eq( this.optsCount - 1 )
//               .css( { top : this.options.stack ? 9 : 0, left : this.options.stack ? 4 : 0, width : this.options.stack ? this.size.width - 8 : this.size.width, transform : 'none' } )
//               .end()
//               .eq( this.optsCount - 2 )
//               .css( { top : this.options.stack ? 6 : 0, left : this.options.stack ? 2 : 0, width : this.options.stack ? this.size.width - 4 : this.size.width, transform : 'none' } )
//               .end()
//               .eq( this.optsCount - 3 )
//               .css( { top : this.options.stack ? 3 : 0, left : 0, transform : 'none' } );
         }

      },
      _initEvents : function() {
         
         var self = this;
         
         this.selectlabel.on( 'mousedown.dropdown', function( event ) {
            self.opened ? self.close() : self.open();
            return false;

         } );

// PODLA MNA BY TO MALA BYT TATO CAST

         this.opts.on( 'click.dropdown', function() {
            if( self.opened ) {
               var opt = $( this );
               self.options.onOptionSelect( opt );
               self.inputEl.val( opt.data( 'value' ) );
               self.selectlabel.html( opt.html() );
               self.close();
            }
         } );

      },
      open : function() {
         var self = this;
         this.dd.toggleClass( 'cd-active' );
         this.listopts.css( 'height', ( this.optsCount + 1 ) * ( this.size.height + this.options.gutter ) );
         this.opts.each( function( i ) {

            $( this ).css( {
               opacity : 1,
               top : self.options.rotated ? self.size.height + self.options.gutter : ( i + 1 ) * ( self.size.height/* + self.options.gutter*/ ),
               left : self.options.random ? Math.floor( Math.random() * 11 - 5 ) : 0,
               width : self.size.width,
               marginLeft : 0,
               transform : self.options.random ?
                  'rotate(' + Math.floor( Math.random() * 11 - 5 ) + 'deg)' :
                  self.options.rotated ?
                     self.options.rotated === 'right' ?
                        'rotate(-' + ( i * 5 ) + 'deg)' :
                        'rotate(' + ( i * 5 ) + 'deg)'
                     : 'none',
               transitionDelay : self.options.delay && Modernizr.csstransitions ? self.options.slidingIn ? ( i * self.options.delay ) + 'ms' : ( ( self.optsCount - 1 - i ) * self.options.delay ) + 'ms' : 0
            } );

         } );
         this.opened = true;

      },
      close : function() {

         var self = this;
         this.dd.toggleClass( 'cd-active' );
         if( this.options.delay && Modernizr.csstransitions ) {
            this.opts.each( function( i ) {
               $( this ).css( { 'transition-delay' : self.options.slidingIn ? ( ( self.optsCount - 1 - i ) * self.options.delay ) + 'ms' : ( i * self.options.delay ) + 'ms' } );
            } );
         }
         this._positionOpts( true );
         this.opened = false;

      }

   }

   $.fn.dropdown = function( options ) {
      var instance = $.data( this, 'dropdown' );
      if ( typeof options === 'string' ) {
         var args = Array.prototype.slice.call( arguments, 1 );
         this.each(function() {
            instance[ options ].apply( instance, args );
         });
      }
      else {
         this.each(function() {
            instance ? instance._init() : instance = $.data( this, 'dropdown', new $.DropDown( options, this ) );
         });
      }
      return instance;
   };

} )( jQuery, window );



ked sa mi nedarilo vyriesit tento problem skusil som ist na to inak

predtym ako volam funkciu

Kód:
$( '#type-managed-type' ).dropdown( {
   gutter : 5
} );


ktora sluzi prave na to aby zo selectu spravila list som si spravil kopiu povodneho selectu do premennej (teda aspon som si myslel)
tu je cely kod

Kód:
var original_managed = $( '#overlay_for_managed' );

if ( original_managed !== null ) {
       $( '#type-managed-type' ).dropdown( {
      gutter : 5
    } );
}



Zaroven som testoval ze ak sa zaloha nespravila nespusti sa ani ta zmena na list a potom s tou povodnou zalohou som chcel pridavat dalsie selecty po kliku a zaroven im na klik pridat aj tu funkciu na zmenu na list avsak narazil som na problem ze v tej zaloznej premenej sa nenachadza povodny select ale uz upraveny list tak som z toho jelen ked najskor robim zalohu az potom sa spusta ta funkcia a este sa ani nespusti kym neni zaloha a tym padom ked tam dava ten list vysledok je rovnaky ako pri tom prvom pripade na klik nereaguje a tym padom ostatne selecty su len mrtve nepouzitelne listy...

Hmm tak ak ste to precitali tento sloh az ku koncu tak dakujem :D a verim ze ma nasmerujete spravne aspon v jednom sposobe a spolu to vyriesime :) Vopred dakujem za pomoc :)


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 06.02.14
Prihlásený: 19.01.18
Príspevky: 443
Témy: 9 | 9
NapísalOffline : 07.11.2016 17:26 | jQuery list plugin

tvoj kod som necital, ale odpoviem ti preco ti toto nejde:

Citácia:
Select sa pekne zobrazi avsak neda sa na neho kliknut ani sa nerozroluje proste jQuery ho nenacita ako zonu kliku stale funguje len ten matersky select Tu prikladam kod z toho pluginu cast ktora by mala ovladat clik som oznacil (teda aspon si myslim ze je to ona) ale neviem ako to upravit aby reagovala aj na ten klik tych clonov.


tu cas kde priradujes eventListener na tvoj select, zrejme tato cast
Kód:
this.opts.on( 'click.dropdown', function() {...


tak ho priradujes na elementy, ktore su uz na stranke pocas dom ready. to znamena ze element, ktory dynamicky vytvoris, nebude mat dany eventListener.
takze mas dve moznosti.
1. ked vytvoris dynamicky novy select, priradis mu eventlistener
2. priradis event listener na nejaky parent element a ako target urcis napr triedu tvojich selectov. napr:
Kód:
<div class="parent-element'>
  <div class="my-select">...</div>
  <div class="my-select">...</div>
  a dalsi, ktory sa vytvori dynamicky
</div>
$('.parent-element').on('click', '.my-select', function() { ... });


Offline

Užívateľ
Užívateľ
jQuery list plugin

Registrovaný: 21.02.07
Prihlásený: 29.06.21
Príspevky: 150
Témy: 59 | 59
Bydlisko: Prievidza
Napísal autor témyOffline : 08.11.2016 13:01 | jQuery list plugin

Super vdaka, funguje tak uz tomu chapem :) aspon budem nabuduce vediet vdaka za pomoc!

VYRIESENE MOZETE LOCK


 [ Príspevkov: 3 ] 


jQuery list plugin



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

jQuery plugin

v JavaScript, VBScript, Ajax

0

419

22.07.2011 2:15

roach189

V tomto fóre nie sú ďalšie neprečítané témy.

jQuery - Cycle plugin

v JavaScript, VBScript, Ajax

1

493

19.07.2011 22:34

Ando

V tomto fóre nie sú ďalšie neprečítané témy.

crawler list

v Internetový marketing, SEO, reklama

3

802

07.09.2010 20:18

shaggy

V tomto fóre nie sú ďalšie neprečítané témy.

White List!

v Počítačové hry

7

813

08.03.2012 17:56

MAFI5

V tomto fóre nie sú ďalšie neprečítané témy.

TODO LIST

[ Choď na stránku:Choď na stránku: 1, 2 ]

v Správy pre vedenie fóra

34

4423

16.06.2006 0:18

JanoF

V tomto fóre nie sú ďalšie neprečítané témy.

Záručný list

v Obchody, reklamácie a právo

1

1661

13.07.2017 16:09

michalesku

Táto téma je zamknutá, nemôžete posielať nové príspevky alebo odpovedať na staršie.

Crawler list

v Internetový marketing, SEO, reklama

2

96042

12.05.2007 2:46

JanoF

V tomto fóre nie sú ďalšie neprečítané témy.

Kontakt list

v PHP, ASP

8

1083

05.07.2008 10:13

Mysql_dodo

V tomto fóre nie sú ďalšie neprečítané témy.

Acer zarucny list

v Obchody, reklamácie a právo

5

1227

16.11.2007 20:01

falcon9

V tomto fóre nie sú ďalšie neprečítané témy.

Linked list - insert

v Assembler, C, C++, Pascal, Java

6

592

25.05.2012 10:18

Fico

V tomto fóre nie sú ďalšie neprečítané témy.

JAVA list.clear()

v Assembler, C, C++, Pascal, Java

1

651

01.04.2011 20:45

Forty-

V tomto fóre nie sú ďalšie neprečítané témy.

support ticket list

v Ostatné programy

2

456

08.08.2013 20:25

elo

V tomto fóre nie sú ďalšie neprečítané témy.

ftp file list

v Ostatné

0

681

03.06.2010 3:02

Narayan

V tomto fóre nie sú ďalšie neprečítané témy.

zarucny list (faktura)

v Obchody, reklamácie a právo

2

1261

23.02.2008 21:06

prkyyynko

V tomto fóre nie sú ďalšie neprečítané témy.

Pokladničny blok/ Záručny list

v Obchody, reklamácie a právo

6

784

30.01.2014 22:07

marekk5111

V tomto fóre nie sú ďalšie neprečítané témy.

select list vo formulári

v PHP, ASP

3

480

26.06.2007 13:48

sento



© 2005 - 2024 PCforum, edited by JanoF