Problem mit ol trigger-Funktion

Hallo Leute !!

Ich habe folgendes Problem.

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.graphicWidth
1.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.graphicYOffset
1.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();

Kann mir evt. jemand weiterhelfen ?

Danke

Stefan

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.


$('#meinDiv').on('click', function(() {...} < meinDiv gelöscht, Event-Handler weg
$(document).on('click', '#meinDiv', function(){...} < meinDiv gelöscht, Even-Handler bleibt (solange "document" nicht gelöscht wird)

e) ist vL_rot1 innerhalb überhaupt sichtbar?

....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’)

Tag !

Erst einmal Danke! für die Rückmeldung.

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.

Gruß Stefan

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)

Die Konsole wirft folgendes aus:

ajax_start.js funktioniert. ajax_suchen.js funktioniert nicht

vL_rot1: Object { metadata: Object, options: Object, name: " Verw_Negativ", id: “OpenLayers_Layer_Vector_51”, div:

<div#OpenLayers_Layer_Vector_51.olLayerDiv>, events: Object, renderer: Object, styleMap: Object, features: Array[6], selectedFeatures:

Array[0], 17 weitere… } ajax_start.js:159:4

vL_rot1: Object { metadata: Object, options: Object, name: " Verw_Negativ", id: “OpenLayers_Layer_Vector_385”, div:

<div#OpenLayers_Layer_Vector_385.olLayerDiv>, events: Object, renderer: Object, styleMap: Object, features: Array[6],

selectedFeatures: Array[0], 17 weitere… } ajax_suchen.js:317:4

Wieso das denn? ich hab keinerlei Probleme damit.

siehe

test [text in klammern]


x[1]

gruss
walter

Er hatte den Programmtext nicht in einem Code-Block (siehe #2).

jo, und ich hatte die Klammern sowohl im Text - test [text in klammern] - als auch im code-block.

und beides geht.

Snip