In meiner OpenLayers Map befindet sich folgender Trigger zum Vergrößern und Verkleinern von Markern:
var pan4 = new OpenLayers.Control.Button({displayClass: ‘fourth’, trigger: function markerplus(){
if (vlrot1.length > 0){for (i = 0; i < vlrot1.length;i++){vL_rot1.features(i).style.graphicHeight=vL_rot1.features(i).style.graphicHeight1.1;
vL_rot1.features(i).style.graphicWidth=vL_rot1.features(i).style.graphicWidth1.1; vL_rot1.features(i).style.graphicXOffset=vL_rot1.features(i).style.graphicXOffset1.1;
vL_rot1.features(i).style.graphicYOffset=vL_rot1.features(i).style.graphicYOffset1.1;}}
…
Beim ersten Laden der Map funktioniert der Trigger.
Wenn ich jetzt eine neue Suchen über Ajax laufen lasse und die map mit jquery $(#div).emty(); aus dem DIV entferne und neu lade, funktioniert der Trigger nicht mehr.
Fehlermeldung in Firebug: TypeError: vL_rot1.features(i) is undefined.
Verstehe das nicht so richtig. Ich lösche den Inhalt des DIV’s und baue den DOM im DIV neu auf. Liegt es evt. am $(#div).emty();
a) Code in Zukunft bitte mit den Code-Tags umschliessen - ist einfacher zu lesen
b) .emty() ist keine originale jQuery-Funktion. Meinten Sie “.empty()”?
c) ohne den weiteren Code oder OL zu kennen, ist vL_rot1.features tatsächlich eine Funktion? Runden Klammern = Funktion, eckige Klammern = Array
d) Wenn du den Event-Handler an ein DOM-Elements hängst und das DOM-Element dann löschst, ist der Even-Handler auch weg.
....markerplus(){
/*
Debug: einfügen als erste Zeile innerhalb der Funktion
Zur Laufzeit dann Browser-Konsole öffnen und nachschauen
*/
console.log('vL_rot1: ', vL_rot1);
...
f) Was soll $(#div) sein? Entweder du hast ein Element mit ID “div”, dann gehört Single- oder Doppelqoutes drumrum > $(‘#div’) oder du willst alle div’s im DOM ansprechen, dann $(‘div’)
Eckige Klammern nimmt der Texteditor im Forum nicht an. Sie sind im Code richtig vorhanden.
.emty ist ein Tipfehler und im Original natürlich .empty .
$(‘#div’) ist mein mapdiv, also das div in dem die map eingefügt wird. Mein Problem vielleicht noch einmal in Kürze.
Beim ersten Aufruf wird die ol-map (incl. Trigger) über eine $(function make_map () {…}) im mapdiv eingefügt. Der Trigger funktioniert.
Anschließend wird der Inhalt von mapdiv mit Hilfe von $(‘#mapdiv’).empty(); gelöscht.
Dann wird der exact gleiche Code über $(function(){$(‘#mapbutton’).click(function() { … });}); wieder eingefügt. Der Trigger funktioniert nicht mehr. Der Rest der map wird richtig dargestellt.
Du hast nicht geschrieben, ob console.log('vL_rot1: ', vL_rot1); in der function markerplus() etwas auf die Browser-Konsole ausgibt. Siehe Beitrag #2 e)