jQuery selectable problem

thedafelix

Grünschnabel
Hallo.
Hab in letzter zeit mal angefangen mit jQuery zu spielen. Hab eigentlich hauptsächlig Code aus den offiziellen jquery Tutorials kopiert, ich kenn mich nicht wirklich aus.
Trotzdem hab ichs mit müh und not geschafft bilder zweispaltig anzuzeigen und diese selektierbar zu machen. Jetzt hätte ich des ganze noch ganz gerne in einer LightBox. Hab schon mehrere durchprobiert die meisten haben des aber nicht so dargestellt wie ich des hätte, lightwindow aber schon. Hab mich deshalb auch für des entschieden. Nur gibts jetzt ein Problem, wenn ich nämlich des 'Javascript prototype framework' einbinde sind meine bilder also listenelement nicht mehr selektierbar. ohne dieses framework meine Chrome aber 'script.aculo.us requires the Prototype JavaScript framework >= 1.5.1' also brauch ich des. Mir die Protoype.js anzuschaun ist echt utopisch sind 3200 Zeilen Code.
Was von euch jemand Rat?
 
Wenn ich jetzt aber ein noconflict objekt erzeuge also var $nc = jQuery.noConflict(); und dann statt
Code:
$(function() {
		$( "#selectable" ).selectable({
			stop: function() {
				var result = $( "#select-result" ).empty();
				$( ".ui-selected", this ).each(function() {
					var index = $( "#selectable li" ).index( this );
					index+=1;
					bildname = "bild"+index+".jpg";
						var container = document.getElementById("pic");
						container.src=bildname;
				});
			}
		});
	});
mit $nc arbeite also
Code:
	$nc(function() {
		$nc( "#selectable" ).selectable({
			stop: function() {
				var result = $nc( "#select-result" ).empty();
				$nc( ".ui-selected", this ).each(function() {
					var index = $nc( "#selectable li" ).index( this );
					index+=1;
					bildname = "bild"+index+".jpg";
						var container = document.getElementById("pic");
						container.src=bildname;
				});
			}
		});
	});
kommt der Fehler 'Uncaught TypeError: Property '$' of object [object DOMWindow] is not a function' woraus ich mal schließe dass $ wieder jquery gehört und nicht dem prototype framework wo der fehler auftritt. Was tun?
 
Hi,

in der richtigen Reihenfolge angewendet, funktioniert das bei mir reibungslos.
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
  "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>www.tutorials.de</title>
<meta name="author" content="Quaese">
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<script src="jquery-1.5.1.min.js" type="text/javascript"></script>
<script src="jquery-ui-1.8.10.min.js" type="text/javascript"></script>
<script type="text/javascript">
<!--
$nc = $.noConflict();
$nc(function(){
        $nc( "#selectable" ).selectable({
            stop: function() {
                var result = $nc( "#select-result" ).empty();
                $nc( ".ui-selected", this ).each(function() {
                    var index = $nc( "#selectable li" ).index( this );
                    index+=1;
                    bildname = "bild"+index+".jpg";
                    //var container = document.getElementById("pic");
                    //container.src=bildname;
                    alert(bildname);
                });
            }
        });

});
//-->
</script>

<script type="text/javascript" src="prototype.js"></script>
<script type="text/javascript" src="scriptaculous.js?load=effects,builder"></script>
<script type="text/javascript" src="lightbox.js"></script>
<link rel="stylesheet" href="lightbox.css" type="text/css" media="screen" />
</head>
<body>
<a href="bild.jpg" rel="lightbox" title="Hier ist ein Bild">bild.jpg</a>

<ol id="selectable">
	<li class="ui-widget-content">Item 1</li>
	<li class="ui-widget-content">Item 2</li>
	<li class="ui-widget-content">Item 3</li>
	<li class="ui-widget-content">Item 4</li>
	<li class="ui-widget-content">Item 5</li>
	<li class="ui-widget-content">Item 6</li>
	<li class="ui-widget-content">Item 7</li>
</ol>

<div id="select-result"></div>
</body>
</html>
Ciao
Quaese
 
Danke für deine ausführlichte Antwort. Ich hab jetzt in deinen Code noch meine Teile mit eingebunden. Außerdem benutze ich LightWindow nicht LightBox. Mein Code sieht jetzt so aus und funktioniert nicht.
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
  "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>www.tutorials.de</title>
<meta name="author" content="Quaese">
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js" type="text/javascript"></script>
<script src="scripts/jquery/jquery-ui-1.8.9.custom.min.js" type="text/javascript"></script>
<script type="text/javascript">
<!--
$nc = $.noConflict();
$nc(function(){
        $nc( "#selectable" ).selectable({
            stop: function() {
                var result = $nc( "#select-result" ).empty();
                $nc( ".ui-selected", this ).each(function() {
                    var index = $nc( "#selectable li" ).index( this );
                    index+=1;
                    bildname = "bild"+index+".jpg";
                    //var container = document.getElementById("pic");
                    //container.src=bildname;
                    alert(bildname);
                });
            }
        });
 
});
//-->
</script>
 	<style>
	#selectable .ui-selecting { background: #FECA40; }
	#selectable .ui-selected { background: #F39814; color: white; }
	#selectable { list-style-type: none; margin: 0; padding: 0; }
	#selectable li { margin: 3px; padding: 1px; float: left; width: 100px; height: 80px; font-size: 4em; text-align: center; }
	</style>
<script type="text/javascript" src="scripts/lightwindow/javascript/prototype.js"></script>
<script type="text/javascript" src="scripts/lightwindow/javascript/scriptaculous.js?load=effects"></script>
<script type="text/javascript" src="scripts/lightwindow/javascript/lightwindow.js"></script>
<link rel="stylesheet" href="scripts/lightwindow/css/lightwindow.css" type="text/css" media="screen" />
</head>
<body>
 
<div id='demo'>
<ol id="selectable">
<li style='clear: left;' class="ui-state-default"><img src='bild1.jpg' height='80' width='100'/></li>
	<li class="ui-state-default"><img src='bild2.jpg' height='80' width='100'/></li>
	<li style='clear: left;' class="ui-state-default"><img src='bild3.jpg' height='80' width='100'/></li>
	<li class="ui-state-default"><img src='bild4.jpg' height='80' width='100'/></li>
	<li style='clear: left;' class="ui-state-default"><img src='bild5.jpg' height='80' width='100'/></li>
	<li class="ui-state-default"><img src='bild6.jpg' height='80' width='100'/></li>
	<li style='clear: left;' class="ui-state-default"><img src='bild7.jpg' height='80' width='100'/></li>
	<li class="ui-state-default"><img src='bild8.jpg' height='80' width='100'/></li>
	<li style='clear: left;' class="ui-state-default"><img src='bild9.jpg' height='80' width='100'/></li>
	<li class="ui-state-default"><img src='bild10.jpg' height='80' width='100'/></li>
	<li style='clear: left;' class="ui-state-default"><img src='bild11.jpg' height='80' width='100'/></li>
	<li class="ui-state-default"><img src='bild12.jpg' height='80' width='100'/></li>
	<li style='clear: left;' class="ui-state-default"><img src='bild13.jpg' height='80' width='100'/></li>
</ol>
 </div>
<<div id="select-result"></div>
<div class="demo-description">
<a id="window_open" class='lightwindow' href="#demo">Show in window</a>
</div>
</body>
</html>
Liegt denke ich daran dass LightWindow des eben nicht nur mit Javascript löst sondern auch mit Css und somit die <ol> liste verändert. Also liegts doch nicht am Prototype Framework.
Sieht man daran dass wenn ich diese Zeile
Code:
<a id="window_open" class='lightwindow' href="#demo">Show in window</a>
rauslösche also mit class='lightwindow' funktionierts.
 
Zuletzt bearbeitet:
Hi,

ok, habe ich überlesen, dass du LightWindow einsetzt.

Hier beruht das Prinzip darauf, dass der Inhalt in das "LightWindow-Element" kopiert und angezeigt wird. Deshalb muss anders als bisher vorgegangen werden:

Zunächst muss die selektierbare Liste mit einer Klasse ausgezeichnet werden, da IDs eindeutig sein müssen. Da die Liste geklont wird, kann das sonst nicht vorausgesetzt werden.

Als nächstes wird die Liste erst im finalAnimationHandler-Handle selektierbar gemacht. Dieser wird durch LightWindow bereit gestellt und wird ausgeführt, nachdem die Animation abgeschlossen wurde.

Problem an dieser Stelle - offensichtlich ein Bug im LightWindow-Script v2.0:
Der IE reagiert darauf mit einer Fehlermeldung, dass die finalAnimationHandler-Funktion kein Objekt sei. Um das zu beheben, muss in der lightwindow.js die Zeile (ca. Zeile 1550)
Code:
this.options.finalAnimationHandler().bind(this, delay);
durch
Code:
(this.options.finalAnimationHandler.bind(this, delay))();
ersetzt werden.

Sollten weitere Handler benötigt werden, muss mit diesen wahrscheinlich ebenso verfahren werden.

Der Autor wurde wegen des Fehlers bereits informiert.


Das geänderte HTML-Dokument sieht wie folgt aus:
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
  "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>www.tutorials.de</title>
<meta name="author" content="Quaese">
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js" type="text/javascript"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.10/jquery-ui.min.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.10/themes/humanity/jquery-ui.css">
<script type="text/javascript">
<!--
$nc = $.noConflict();
//-->
</script>
<style>
    #selectable .ui-selecting { background: #FECA40; }
    #selectable .ui-selected { background: #F39814; color: white; }
    #selectable { list-style-type: none; margin: 0; padding: 0; }
    #selectable li { margin: 3px; padding: 1px; float: left; width: 100px; height: 80px; font-size: 4em; text-align: center; }
</style>
<script type="text/javascript" src="lightwindow_v2.0/javascript/prototype.js"></script>
<script type="text/javascript" src="lightwindow_v2.0/javascript/scriptaculous.js?load=effects"></script>
<script type="text/javascript" src="lightwindow_v2.0/javascript/lightwindow.js"></script>
<link rel="stylesheet" href="lightwindow_v2.0/css/lightwindow.css" type="text/css" media="screen" />
<script type="text/javascript">
<!--
$nc(function(){
  myLightWindow = new lightwindow({
    finalAnimationHandler: function(){
      $nc("#lightwindow .selectable").selectable({
        stop: function() {
          var result = $nc("#select-result").empty();
          $nc(".ui-selected", $nc("#lightwindow .selectable")).each(function() {
            var index = $nc("#lightwindow .selectable li" ).index( this );
            if(index!=-1){
              index+=1;
              bildname = "bild"+index+".jpg";
              //var container = document.getElementById("pic");
              //container.src=bildname;
              alert(bildname);
            }
          });
        }
      });
    }
  });
});
//-->
</script>
</head>
<body>
<div id="demo">
<ol id="selectable" class="selectable">
  <li style="clear: left;" class="ui-state-default"><img src="bild1.jpg" height="80" width="100"/></li>
    <li class="ui-state-default"><img src="bild2.jpg" height="80" width="100"/></li>
    <li style="clear: left;" class="ui-state-default"><img src="bild3.jpg" height="80" width="100"/></li>
    <li class="ui-state-default"><img src="bild4.jpg" height="80" width="100"/></li>
    <li style="clear: left;" class="ui-state-default"><img src="bild5.jpg" height="80" width="100"/></li>
</ol>
 </div>
<div id="select-result"></div>
<div class="demo-description">
<a id="window_open" class="lightwindow" href="#demo">Show in window</a>
</div>
</body>
</html>
Ciao
Quaese
 
Zurück