php.de

Zurück   php.de > Webentwicklung > JavaScript, Ajax und mehr

JavaScript, Ajax und mehr dynamisches Scripten und Interaktion auf Clientebene

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 12.09.2011, 20:42  
Neuer Benutzer
 
Registriert seit: 31.08.2011
Beiträge: 7
PHP-Kenntnisse:
Anfänger
krabbat befindet sich auf einem aufstrebenden Ast
Standard jQuery Akkordeon ignoriert link

Hi!
In besagtem Akkordeon wird beim Mausklick lediglich das Submenü geöffnet, der eigentliche Link jedoch ignoriert.
Kann ich das irgendwie ändern?

Hier der Schnipsel:
Code:
                    if(theElement.hasClass('acitem') && theElement.is(':visible')) {
                        if($(parent).hasClass('collapsible')) {
                            $('.acitem:visible', parent).first().slideUp('normal', 
                            function() {
                                $(this).prev().removeClass('active');
                            }
                        );
                        return false;  
                    }
Danke für eure Hilfe.
krabbat ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 12.09.2011, 20:59  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
der eigentliche Link jedoch ignoriert.
???
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 12.09.2011, 23:15  
Neuer Benutzer
 
Registriert seit: 31.08.2011
Beiträge: 7
PHP-Kenntnisse:
Anfänger
krabbat befindet sich auf einem aufstrebenden Ast
Standard

Sorry... undeutlich ausgedrückt:

Beispiel Website:

Code:
<ul class="menu collapsible">
		<a href="detail.php?category=01">Thema1</a>
			<ul class="acitem">
				<li><a href="detail.php?category=011">Thema1 Spezial1</a></li>
				<li><a href="detail.php?category=012">Thema1 Spezial2</a></li>				
			</ul>				
	</ul>
Thema 1 ist als Link konfiguriert, wird vom Script aber nicht als Link erkannt sondern lediglich als class mit vorhandenem 'acitem'.
Somit wird lediglich das Untermenü geöffnet, der Link jedoch nicht.

Was ich möchte ist: Hauptlink klicken und alle fraglichen Inhalte mit category=01 über detail.php ausgeben als auch das Submenü mit den Inhalten 011, 012... neu darstellen.

Das js nochmal komplett:
Code:
jQuery.fn.initMenu = function() {  
    return this.each(function(){
        var theMenu = $(this).get(0);
        $('.acitem', this).hide();
        $('li.expand > .acitem', this).show();
        $('li.expand > .acitem', this).prev().addClass('active');
        $('li a', this).click(
            function(e) {
                e.stopImmediatePropagation();
                var theElement = $(this).next();
                var parent = this.parentNode.parentNode;
                if($(parent).hasClass('noaccordion')) {
                    if(theElement[0] === undefined) {
                        window.location.href = this.href;
                    }
                    $(theElement).slideToggle('normal', function() {
                        if ($(this).is(':visible')) {
                            $(this).prev().addClass('active');
                        }
                        else {
                            $(this).prev().removeClass('active');
                        }    
                    });
                    return false;
                }
                else {
                    if(theElement.hasClass('acitem') && theElement.is(':visible')) {
                        if($(parent).hasClass('collapsible')) {
                            $('.acitem:visible', parent).first().slideUp('normal', 
                            function() {
                                $(this).prev().removeClass('active');
                            }
                        );
                        return false;  
                    }
                    return false;
                }
                if(theElement.hasClass('acitem') && !theElement.is(':visible')) {         
                    $('.acitem:visible', parent).first().slideUp('normal', function() {
                        $(this).prev().removeClass('active');
                    });
                    theElement.slideDown('normal', function() {
                        $(this).prev().addClass('active');
                    });
                    return false;
                }
            }
        }
    );
});
};

$(document).ready(function() {$('.menu').initMenu();});
Hoffe, das war verständlich?
krabbat ist offline   Mit Zitat antworten
Alt 12.09.2011, 23:29  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Das macht so keinen Sinn. Akkordeon funktionier als Javascript, also Client-dynamisch. Ein Link erzeugt aber einen Request.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 15.09.2011, 20:52  
Neuer Benutzer
 
Registriert seit: 31.08.2011
Beiträge: 7
PHP-Kenntnisse:
Anfänger
krabbat befindet sich auf einem aufstrebenden Ast
Standard

'Das macht so keine Sinn' ist natürlich genau das, was ein wissensdurstiger User mit konkreter Frage hören möchte.

Nun, da sich hier niemand konstruktiv zu meinem Anliegen geäußert hat, musste ich es in dreitägiger harter Arbeit selber lösen.
Und das als absoluter Newbi in Sachen php und javascript.

Mein beschriebenes Anliegen ließ sich - nachdem ich es endlich kapiert hatte - ganz leicht mittels eines cookies lösen.

Benötigt wird dazu das plugin jquery.cookie.js sowie der script von vincent helye: jquery.heljenav.js

Code:
(function($) {
    // PLUGIN DEFINITION
    $.fn.helyenav = function(options) {
        // init plugin and build options before elemnts iteration
        var opts = $.extend({}, $.fn.helyenav.defaults, options);
        $.helyenav.opts = opts;
        $.helyenav.current = opts.current;      
        
        return this.each(function() {
            // execute plugin on each elt
            $.helyenav.init(this, opts);
            $(this).click(onClick);
        });
        
        // private
        function onClick() {
            return $.cookie(opts.cookieName, $.helyenav.current(), { path: opts.cookiePath});
        }
    };

    $.helyenav = {
        init: function(container, opts) {
            var current = $.helyenav.current();
            this.container = container;
            var subnavs = $(container).find(opts.childBlockElt);
            var subnavsNames = $.map(subnavs, function(el) {
                return $(el).parent().attr('class');
            });
            $(subnavs).hide();
            if($.cookie(opts.cookieName) == current){
                subnav(current).show();
            } else {
              $.each(subnavsNames, function(i, name){
                 if($.cookie(opts.cookieName)==name){
                       subnav(name).show();
                       subnav(name).css('display', 'block'); /* for FF2, in case it's inline */
                       subnav(name).slideUp(opts.speed);
                    }
                    if(current==name){
                       subnav(name).slideDown(opts.speed);
                       $.cookie(opts.cookieName, current, { path: opts.cookiePath});
                    }
              });
           }
       
           // private
           function subnav(name){
               return $(this.container).find("." + name + ' > ' + $.helyenav.opts.childBlockElt);
           }
        }
    };
    
    // PLUGIN DEFAULTS
    $.fn.helyenav.defaults = {
        current: function(){ return $('body').attr('class'); },
        speed: 'slow',
        cookieName: 'last',
        cookiePath: '/',
        childBlockElt: 'ul'
    };
    
})(jQuery);
Gestartet wird der script entweder direkt auf der Seite oder per eingebundener .js:

Code:
$(document).ready(function($) {
   /* open external links in a new window */
   $('a[rel="external"], a[href^=http]').each(function(){
     if(this.href.indexOf(location.hostname) == -1) { 
        $(this).attr('target', '_blank');
     }
   });
   $('#nav > ul').helyenav();
});
Das helyenav-script speichert einen cookie mit der body-class des jeweiligen Dokumentes.
Beim aufrufen eines Dokumentes mit eben dieser class im body-tag, wird entsprechendes submenü geöffet.
Wichtig ist, das div - in welchem das akkordeon liegt - wie in diesem fall mit <div id='nav'> sowie den <body class='wie_auch_immer'> für das jeweilig aufgerufene Submenü richtig zu bezeichnen.

Bei Datenbankmenüs wie in meinem Fall, werden die Parameter für die Body-class einfach via php als Variable übergeben.


Dank an all die Experten in diesem Forum für ihre unzähligen Anregungen.
Hoffe, mit meinem Beitrag Usern mit ähnlichen Problemen ne Menge Frust zu ersparen.

Geändert von krabbat (15.09.2011 um 20:56 Uhr).
krabbat ist offline   Mit Zitat antworten
Alt 16.09.2011, 10:21  
Erfahrener Benutzer
 
Registriert seit: 28.05.2008
Beiträge: 2.094
PHP-Kenntnisse:
Fortgeschritten
rudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nett
Standard

Hi Krabat,

Zitat:
Nun, da sich hier niemand konstruktiv zu meinem Anliegen geäußert hat, musste ich es in dreitägiger harter Arbeit selber lösen.
Und das als absoluter Newbi in Sachen php und javascript.
Nikosch hat dir doch ehrlich geantwortet, dein Code wirkte auch nicht wie der eines absoluten Newbies in Javascript/jQuery. Oder seit wann schreiben newbies jQuery plugins? Allerdings hatte er Recht, es machte erstmal wirklich keinen Sinn, warum hat er dir auch gleich erklärt. Das solltest du nicht persönlich nehmen, sondern stattdessen konkreter werden.

Ich für meinen Teil hab dir nicht geantwortet, da mir die Motivation fehlte, mich durch Code durchzuwühlen, ohne die HTML Struktur zu kennen, v.a., da ich selbst mit Arbeit zugesch**** bin. Wieso gibst du den Leuten nicht gleich eine Beispielseite, warum benutzt du keine tools wie jsbin.com / jsfiddle.net, um uns das Problem wirklich zu zeigen?

Zu deinem Code: das Ganze wirkt jetzt ein wenig so, als hättest du jQueryuis menu plugin nachgebastelt, aber egal, wenn das erstmal so funktioniert.

In $.helyenav.init könntest du chainen:
PHP-Code:
            $.each(subnavsNames, function(iname){
                 if($.
cookie(opts.cookieName)==name){
                       
subnav(name)
                           .
show()
                           .
css('display''block'/* auch für chrome in älteren versionen sinnvoll */
                           
.slideUp(opts.speed);
                    }
// ...
              
}); 
In deiner dom-ready-fn: indexOf wird von IE6 und IE7 noch nicht unterstützt, benutze stattdessen besser $.inArray (misslungene Namensgebung, macht aber genau das selbe wie indexOf - nur crossbrowser kompatibel).

Ich verstehe nicht, wieso du am body eine css-Klasse setzen musst. Viele Wege führen nach Rom, aber da du eh schon mit $.cookie arbeitest, .. (Es sei denn, du blendest per css z.b. Inhalte ein und aus, aber das kann man ohne Beispielseite nicht beurteilen).

Das sieht alles in allem brauchbar aus. Toll, dass du den Source hier reingepostet hast, so machen threads auch Sinn


Grüße


Basti
__________________
++++ Wieder einer ins Netz gegangen: Phishers Fritz zufrieden ++++
Blog
rudygotya ist offline   Mit Zitat antworten
Alt 16.09.2011, 19:44  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von rudygotya Beitrag anzeigen
In deiner dom-ready-fn: indexOf wird von IE6 und IE7 noch nicht unterstützt
Wie kommst du denn auf die Idee?

http://de.selfhtml.org/javascript/ob...g.htm#index_of
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline   Mit Zitat antworten
Alt 16.09.2011, 21:09  
Erfahrener Benutzer
 
Registriert seit: 28.05.2008
Beiträge: 2.094
PHP-Kenntnisse:
Fortgeschritten
rudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nett
Standard

https://developer.mozilla.org/en/Jav.../Array/indexOf
oder auch: http://soledadpenades.com/2007/05/17...rnet-explorer/

Laut dev mozilla auch in IE8 noch nicht, wobei das definitiv verkehrt ist. Hab grad leider keinen IE7 zum testen da.
__________________
++++ Wieder einer ins Netz gegangen: Phishers Fritz zufrieden ++++
Blog
rudygotya ist offline   Mit Zitat antworten
Alt 16.09.2011, 21:42  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

Im Code wird indexOf auf die href-Eigenschaft eines Links angewandet - und die ist kein Array, sondern ein String …
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline   Mit Zitat antworten
Alt 16.09.2011, 22:02  
Erfahrener Benutzer
 
Registriert seit: 28.05.2008
Beiträge: 2.094
PHP-Kenntnisse:
Fortgeschritten
rudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nett
Standard

oh ach gott. ist mir null aufgefallen, danke fürs korrigieren. Ich hab nur indexOf gesehen und dachte, da war doch was..
__________________
++++ Wieder einer ins Netz gegangen: Phishers Fritz zufrieden ++++
Blog
rudygotya ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Link wird falsch angezeigt jotpunktbee PHP Einsteiger 9 14.08.2011 14:31
[Erledigt] facebook bild link mistermint PHP Einsteiger 1 13.08.2011 17:01
Eine Seite mit allen GET-Variablen in Link übernehmen snemies PHP Tipps 2009 5 30.10.2009 15:40
link -> get variabeln auslesen clemo PHP Tipps 2009 10 25.09.2009 02:16
[Erledigt] gesamte Spalte in Array abspeichern Kotbatzen PHP Tipps 2009 23 05.09.2009 00:01
Link mit ID in Echo einbinden Mitch26 PHP Tipps 2009 4 06.08.2009 17:02
[Erledigt] mail() mit &lt;a herf... Link in Html Mail geht nicht!? BettinaSyn PHP Tipps 2009 11 16.05.2009 22:28
[Erledigt] phpmailer link im body bereich definieren raphaelf PHP Tipps 2009 5 14.05.2009 10:52
erst beim zweiten Login funktioniert Link scarry_77 PHP Tipps 2009 5 14.04.2009 00:35
Klick auf Seitenobjekt (Link mit onClick Ereigniss) mit JScript simulieren Stephan_87 JavaScript, Ajax und mehr 1 22.12.2008 21:50
[Erledigt] Link Übergabe per $_GET['Variable'] vita PHP Tipps 2008 16 14.07.2008 15:19
weiterleitung per link im gleichem frame PHP Tipps 2005 17 23.05.2005 11:34
ein link in einem TD Sclot HTML, Usability und Barrierefreiheit 4 12.02.2005 13:06
absoluter link PHP Tipps 2004 10 01.07.2004 23:00
PHP Link ??? PHP Tipps 2004 4 25.06.2004 17:24

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
akkordeo jquery, jquery arkodion, akkordion mit php, jquery plugin auf teilbereich find, akordeon menu with cookies ohne plugin, jquery toggle link id übergeben, ajax ignoriert hyperlink

Alle Zeitangaben in WEZ +2. Es ist jetzt 11:31 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum