jQuery scrolltop sa po animácii vráti

Programovacie jazyky, rady, poradňa...
Stoporko
VIP
VIP
Používateľov profilový obrázok
Príspevky: 3989
Registrovaný: 28 dec 2005, 14:24
Bydlisko: Holy Land
Kontaktovať používateľa:

jQuery scrolltop sa po animácii vráti

Príspevok od používateľa Stoporko »

Ahojte,

trápim s problémom z názvu témy.

Na úvod môj js:

Kód: Vybrať všetko

$(document).ajaxComplete(function(event, xhr, settings) {

    switch(settings.extraData.view_name){
      
      case "test_lektori":
			
				$('.lektor_odkaz').on('click', function(e) {
					console.log('zaciatok onclick');
					e.preventDefault();
					$('html, body').animate({
					scrollTop: $('#lektor_kotva').offset().top
					}, 800 );
				});
				
					var filter_id = $('#views-exposed-form-test-lektori-block-1 select[name="tid"]').find(":selected").val();
		
					$('.filter-tab a').removeClass('active');
					$('.filter-tab').find('.' + filter_id).addClass('active');
					console.log('pridany class active');
	
        break;

      default:
        break;
    };
	
  });
O čo ide: používam ajax a jQuery. Po kliknutí stránka odroluje na správnu pozíciu (div id="lektor_kotva"), no potom sa vráti nazad hore. Skúšal som e.preventDefault i return false a bez úspechu. Čo robím zle?

Druhá časť kódu je o tom, že sledujem ktorý odkaz je kliknutý a priradím mu class="active" - to funguje ako má, tu je to pre kompletnosť kódu.
sharky-no
King
King
Používateľov profilový obrázok
Príspevky: 1681
Registrovaný: 31 okt 2006, 19:53

Re: jQuery scrolltop sa po animácii vráti

Príspevok od používateľa sharky-no »

nemas pri tom ako na to klikas na za url hashtag? #
Stoporko
VIP
VIP
Používateľov profilový obrázok
Príspevky: 3989
Registrovaný: 28 dec 2005, 14:24
Bydlisko: Holy Land
Kontaktovať používateľa:

Re: jQuery scrolltop sa po animácii vráti

Príspevok od používateľa Stoporko »

sharky-no: nie, bez hashtagu.

Skúsil som dať scrollovaciu funkciu do "úvodnej" časti kódu:

Kód: Vybrať všetko

Drupal.behaviors.exposedfilter_buttons = {
    attach: function(context, settings) {
		
	    $('.filter-tab a').on('click', function(e) {
        e.preventDefault();
        
        var id = $(e.target).attr('id');
        
        var filter = $('#views-exposed-form-test-lektori-block-1 select[name="tid"]');
        filter.val(id);

        $('.filter-tab a').removeClass('active');
        $(e.target).addClass('active');

        $('#views-exposed-form-test-lektori-block-1 select[name="tid"]').trigger('change');
        $('input#edit-submit-test-lektori.ctools-use-ajax.ctools-auto-submit-click.form-submit').trigger('click');
        
			//scrollovanie na #lektor_kotva
					console.log('zaciatok onclick'); // toto sa v konzole zobrazí 2x
					
					$('html, body').animate({
					scrollTop: $('#lektor_kotva').offset().top
					}, 800 );
				
      });
	 
	  
    }
  };
A v konzole je vidno, že "začiatok onclick" je 2x. Teda niečo mi spúšťa tú scrollovaciu animáciu 2x. Čo?

//autoeditácia príspevku (20 Jan 2017, 16:11)
Problem pravdepodobne solved :)

Kód: Vybrať všetko

$(document).ajaxComplete(function(event, xhr, settings) {
	$('html, body').animate({scrollTop: $('#lektor_kotva').offset().top	}, 800 );
		console.log('zaciatok onclick');
    switch(settings.extraData.view_name){
      
      case "test_lektori":
			
				
				
					var filter_id = $('#views-exposed-form-test-lektori-block-1 select[name="tid"]').find(":selected").val();
		
					$('.filter-tab a').removeClass('active');
					$('.filter-tab').find('.' + filter_id).addClass('active');
					console.log('pridany class active');
	
        break;

      default:
        break;
    };
	
  });
Ak tomu správne rozumiem: Tým, že som tam mal pôvodne aj .on(click) tak sa animácia vlastne spúšťala dvakrát. :smt059
scriptType
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 110
Registrovaný: 22 feb 2011, 19:34

Re: jQuery scrolltop sa po animácii vráti

Príspevok od používateľa scriptType »

Ten celý AJAXový blok si načítal vždy po nejakom evente čo sa udial, čo vidíš v argumentoch tej volanej funkcie:

Kód: Vybrať všetko

$(document).ajaxComplete( function(event, xhr, settings) {
Čiže sa funkcia zavolala napríklad po kliku. Následne sa vykonal Switch a znovu si overoval kliknutie na nejaký element. Pokiaľ chceš prídavne kontrolovať či bolo kliknuté na ten konkrétny element ktorý chceš, tak premenná event ktorá je v argumentoch funkcie sa po konkrétnej udalosti naplní dátami ako objekt, pokiaľ je v argumentoch funkcie. Konkrétne kliknutý element sa dá kontrolovať cez event.target atď.

Vsuvka pre zaujímavosť, napadlo ma otestovať to v holej forme, čo sa stane po tomto:

Kód: Vybrať všetko

$('.test').on('click', function() {

	console.log("1");

	$('.test').on('click', function() {
		console.log("2");
	});

});
Po prvom kliku na .test sa vypíše 1
Po druhom - 1 2
Po treťom - 1 2 2
Po štvrtom - 1 2 2 2
...

Čiže vždy po kliknutí na .test sa načíta ďalší klikací event na tú konkrétnu triedu, ktorý sa následne vždy vykoná po ďalšom a ďalšom kliku.
Napísať odpoveď