• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[GELÖST] jqueryFileTree - Ereignis bei Doppelklick auf Ordner

dailynight

New member
Hallo zusammen,

ist wahrscheinlich nicht schwierig, aber ich komme nicht drauf.

Das JS listet einen Ordner mit seinen Dateien auf. Ich möchte per Doppelklick einen Dateinamen in ein Inputfeld übertragen. Für Dateien funktioniert das auch gut, aber für Ordner ist das so nicht vorgesehen. Wie kann ich das Script ändern, damit es auch einen Ordnernamen in das Inputfeld überträgt?:confused:

Hier das JS:
HTML:
if(jQuery) (function($){
	
	$.extend($.fn, {
		fileTree: function(o, h) {
			// Defaults
			if( !o ) var o = {};
			if( o.root == undefined ) o.root = '/';
			if( o.script == undefined ) o.script = 'jqueryFileTree.php';
			if( o.folderEvent == undefined ) o.folderEvent = 'click';
			if( o.expandSpeed == undefined ) o.expandSpeed= 500;
			if( o.collapseSpeed == undefined ) o.collapseSpeed= 500;
			if( o.expandEasing == undefined ) o.expandEasing = null;
			if( o.collapseEasing == undefined ) o.collapseEasing = null;
			if( o.multiFolder == undefined ) o.multiFolder = true;
			if( o.loadMessage == undefined ) o.loadMessage = 'Lade...';
			
			$(this).each( function() {
				
				function showTree(c, t) {
					$(c).addClass('wait');
					$(".jqueryFileTree.start").remove();
					$.post(o.script, { dir: t }, function(data) {
						$(c).find('.start').html('');
						$(c).removeClass('wait').append(data);
						if( o.root == t ) $(c).find('UL:hidden').show(); else $(c).find('UL:hidden').slideDown({ duration: o.expandSpeed, easing: o.expandEasing });
						bindTree(c);
					});
				}
				
				function bindTree(t) {
					$(t).find('LI A').bind(o.folderEvent, function() {
						if( $(this).parent().hasClass('directory') ) {
							if( $(this).parent().hasClass('collapsed') ) {
								// Expand
								if( !o.multiFolder ) {
									$(this).parent().parent().find('UL').slideUp({ duration: o.collapseSpeed, easing: o.collapseEasing });
									$(this).parent().parent().find('LI.directory').removeClass('expanded').addClass('collapsed');
								}
								$(this).parent().find('UL').remove(); // cleanup
								showTree( $(this).parent(), escape($(this).attr('rel').match( /.*\// )) );
								$(this).parent().removeClass('collapsed').addClass('expanded');
							} else {
								// Collapse
								$(this).parent().find('UL').slideUp({ duration: o.collapseSpeed, easing: o.collapseEasing });
								$(this).parent().removeClass('expanded').addClass('collapsed');
							}
						} else {
							h($(this).attr('rel'));
						}
						return false;
					});
					// Prevent A from triggering the # on non-click events
					if( o.folderEvent.toLowerCase != 'click' ) $(t).find('LI A').bind('click', function() { return false; });
				}
				// Loading message
				$(this).html('<ul class="jqueryFileTree start"><li class="wait">' + o.loadMessage + '<li></ul>');
				// Get the initial file list
				showTree( $(this), escape(o.root) );
			});
		}
	});
	
})(jQuery);

Der Aufruf in der HTML Datei:
HTML:
		<script type="text/javascript">
			
			$(document).ready( function() {		
				$('#fileTreeDemo').fileTree({ root: '../../../', script: 'connectors/jqueryFileTree.php', folderEvent: 'click', expandSpeed: 750, collapseSpeed: 750, multiFolder: false }, function(file) { 
				$('#datei').val(file);
				});
			});
		</script>

	</head>
	<body>
		<div class="example">
			<div id="fileTreeDemo" class="demo"></div>
		</div>
		<form action="dateirechte_setzen.php" method="post"><br />
	        Rechte:          <input name="datei" size="20" type="text" /><br />
	        Datei/Ordner: <input id="datei" maxlength="3" name="datei" size="45" type="text" /><br />
	        <input type="submit" value="Ausführen" /><br />
		</form>

Wie bekomme ich es hin, das das script auch einen Doppelklick auch einen Ordner akzeptiert? :eek:

:cool: Danke schon mal im voraus...
 
Zuletzt bearbeitet von einem Moderator:
du musst halt die variable finden und darauf einen event registrieren.
ich bin unsicher ob du das wissen wolltest.
oder soll jetzt jemand für dich den reichlich großzügigen quellcode lesen und zerpflücken?
 
Bau doch in das HTML, das die jqueryFileTree.php zurückliefert, einfach bei den Ordnern ein weiteres HTML-Element ein, auf das du Klicken kannst, damit der Wert dann in das <input> übertragen wird.
In der bindTree kannst du dann nach diesen Elementen suchen und den entsprechenden Event-Listener registrieren.
 
Hallo,

vielen Dank euch. Das hat mir sehr geholfen.

Der Beitrag von tsseh war es.

Ich habe einfach das :

Code:
h($(this).attr('rel'));

in die Schleife vom Expand kopiert. Und nun funktioniert der Übertrag auch für Ordner. Ihr seid super, vielen Dank.
 
Zurück
Oben