Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Javascript-Filter-Problem in der Chrome-Komponente von Delph


Tow - So 20.01.13 17:46
Titel: Javascript-Filter-Problem in der Chrome-Komponente von Delph
Hallo

Bei meine Projekt habe ich die Chrome-Komponente, welche Belege anzeigen soll.
Der Filter wird per Javascript gesteuert. Ich will, dass, wenn man
den LInk hinzufügen klickt, dass der Filter von Javasript "gemerkt" wird.
Was aber aus irgendeinem Grund nicht funktioniert.

Das Javascript:






JavaScript-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
$(document).ready(function(){
  
    
  

  
  var items = $('#stage li'),
    itemsByTags = {};
  
  // Looping though all the li items:
  
  items.each(function(i){
    var elem = $(this),
      tags = elem.data('tags').split(',');
    
    // Adding a data-id attribute. Required by the Quicksand plugin:
    elem.attr('data-id',i);
    
    $.each(tags,function(key,value){
      
      // Removing extra whitespace:
      value = $.trim(value);
      
      if(!(value in itemsByTags)){
        // Create an empty array to hold this item:
        itemsByTags[value] = [];
      }
      
      // Each item is added to one array per tag:
      itemsByTags[value].push(elem);
    });
    
  });

  // Creating the "Everything" option in the menu:
  
  
  
  //createList('All',items);

  // Looping though the arrays in itemsByTags:
  $.each(itemsByTags,function(k,v){
    createList(k,v);
  });
  
  $('#filter a').live('click',function(e){
    var link = $(this);
    
    link.addClass('active').siblings().removeClass('active');
    
    // Using the Quicksand plugin to animate the li items.
    // It uses data('list') defined by our createList function:
    
    $('#stage').quicksand(link.data('list').find('li'));
    e.preventDefault();
  });
  
  //$('#filter a:first').click();
  
  function createList(text,items){
    
    // This is a helper function that takes the
    // text of a menu button and array of li items
    
    // Creating an empty unordered list:
    var ul = $('<ul>',{'class':'hidden'});
    
    $.each(items,function(){
      // Creating a copy of each li item
      // and adding it to the list:
      
      $(this).clone().appendTo(ul);
    });

    ul.appendTo('#container');

    // Creating a menu item. The unordered list is added
    // as a data parameter (available via .data('list'):
    
    var a = $('<a>',{
      html: text,
      href:'#',
      data: {list:ul}
    }).appendTo('#filter');
  }


//Die Filter im Browser Pool erhalten Links
$('#filter a:contains("Alle.")').attr('onclick','window.location="wbal"');
$('#filter a:contains("ER.")').attr('onclick','window.location="wber"');
$('#filter a:contains("AR.")').attr('onclick','window.location="wbar"');
$('#filter a:contains("KA.")').attr('onclick','window.location="wbka"');
$('#filter a:contains("BK.")').attr('onclick','window.location="wbbk"');
$('#filter a:contains("SO.")').attr('onclick','window.location="wbso"');
$('#filter a:contains("UNB.")').attr('onclick','window.location="wbub"');

//Die Filter im Browser AlleBelege erhalten Links
$('#filter a:contains("Alle")').attr('onclick','window.location="wbal"');
$('#filter a:contains("ER")').attr('onclick','window.location="wber"');
$('#filter a:contains("AR")').attr('onclick','window.location="wbar"');
$('#filter a:contains("KA")').attr('onclick','window.location="wbka"');
$('#filter a:contains("BK")').attr('onclick','window.location="wbbk"');
$('#filter a:contains("SO")').attr('onclick','window.location="wbso"');
$('#filter a:contains("UNB")').attr('onclick','window.location="wbub"');

//Standardmäßig wird Zuletzt Erstellt markiert 


$('#filter a:contains("Zuletzt Erstellt")').click();
$('#filter a:contains("Alle.")').click();

$('#filter a:contains("Zuletzt Erstellt")').attr('onclick','window.location="aktiverpool0"');
$('#filter a:contains("Heute erstellt")').attr('onclick','window.location="aktiverpool0"');
$('#filter a:contains("Alles")').attr('onclick','window.location="aktiverpool0"');
$('#filter a:contains("RW-SA VCHK 2012/13")').attr('onclick','window.location="aktiverpool1"');
$('#filter a:contains("BW-SA VCHK 2012/13")').attr('onclick','window.location="aktiverpool2"');
$('#filter a:contains("t")').attr('onclick','window.location="aktiverpool3"');
});

--------------------------------------------------------------------------------------------------
PRocedure, die Javascript schreibt:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
procedure TForm1.WriteJavaScript();
var
head: textfile;

pathscript, Line: string;
Memo1: TMemo;
I: integer;
begin
//Der Pfad wo sich "Kopf" des JavaScripts befindet wird geladen
pathscript := HauptverzeichnisHTML+'js\scripthead.txt';

//Ein Memo wird erzeugt in dem der Text zusammengebaut wird; das Memo ist nicht sichtbar
//weil es ja nur für das Speichern im Hintergrund benötigt wird
Memo1 := TMemo.Create(self);
Memo1.Visible:=true;
Memo1.Parent := Form2;
Memo1.height := 1;
Memo1.width := 1;

//Wenn die "Kopf"-Datei existiert, dann wird der nachfolgende Code ausgeführt
//Hinweis: Die Kopfdatei enthält den oberen Bereich der HTML welcher nicht verändert werden muss,
//dieser wird aus einer Textdatei im Ordner html geladen um die einzelnen Zeilen nicht
//im Quellcode manuell eingeben zu müssen
if fileexists(pathscript) then
begin
  //Verbindung zur Textdatei wird hergestellt
  AssignFile(head, pathscript);

  //Zugriff zum Lesen wird hergestellt
  Reset(head);

  //Lies so lange nicht das Ende der Datei head (EOF) erreicht ist
  while not EOF(head) do
  begin
    //Lies eine Zeile aus head und schreibe sie ins Memo
    Readln(head, Line);
    Memo1.Lines.Add(Line);
  end;

  //Wurden alle Zeilen von head gelesen so wird die Verbindung getrennt und die Datei "geschlossen"
  CloseFile(head);
end;

//Hier wird festgelegt welches Item durch JavaScript markiert werden sollt
case CaseStr(PoolAktivElement, ['al''er''ar''ka''bk''so''ub'], True) of
0 : Memo1.Lines.Add('$(''#filter a:contains("Alle.")'').click();');
1 : Memo1.Lines.Add('$(''#filter a:contains("ER.")'').click();');
2 : Memo1.Lines.Add('$(''#filter a:contains("AR.")'').click();');
3 : Memo1.Lines.Add('$(''#filter a:contains("KA.")'').click();');
4 : Memo1.Lines.Add('$(''#filter a:contains("BK.")'').click();');
5 : Memo1.Lines.Add('$(''#filter a:contains("SO.")'').click();');
6 : Memo1.Lines.Add('$(''#filter a:contains("UNB.")'').click();');
end;

//Hier wird festgelegt welches Item durch JavaScript markiert werden soll
case  CaseStr(AlleBelegeAktivElement, ['al''er''ar''ka''bk''so''ub'], True) of
0 : Memo1.Lines.Add('$(''#filter a:contains("Alle")'').click();');
1 : Memo1.Lines.Add('$(''#filter a:contains("ER")'').click();');
2 : Memo1.Lines.Add('$(''#filter a:contains("AR")'').click();');
3 : Memo1.Lines.Add('$(''#filter a:contains("KA")'').click();');
4 : Memo1.Lines.Add('$(''#filter a:contains("BK")'').click();');
5 : Memo1.Lines.Add('$(''#filter a:contains("SO")'').click();');
6 : Memo1.Lines.Add('$(''#filter a:contains("UNB")'').click();');
end;

Memo1.Lines.Add('$(''#filter a:contains("Zuletzt Erstellt")'').attr(''onclick'',''window.location="aktiverpool0"'');');
Memo1.Lines.Add('$(''#filter a:contains("Heute erstellt")'').attr(''onclick'',''window.location="aktiverpool0"'');');

//Hier werden den Filtern URLs zugewiesen
for I := 0 to Length(PoolIdentifikationText)-1 do
begin
Memo1.Lines.Add('$(''#filter a:contains("'+PoolIdentifikationText[I]+'")'').attr(''onclick'',''window.location="aktiverpool'+PoolIdentifikationID[I]+'"'');');
end;


//Die Klammern im Script müssen geschlossen werden
Memo1.Lines.Add('});');

//Die Datei wird erstellt und der gesamte Text des Memos darin gespeichert,
//der Name setzt sich aus poolverwaltung+Zahl+.html zusammen, wobei Zahl die Beginnzahl der Seite ist
//siehe auch weiter oben um eine genauer Erklärung zu finden
Memo1.Lines.SaveToFile(HauptverzeichnisHTML+'js\script.js');

//Das Memo wird wieder aus dem Speicher gelöscht
Memo1.Free;
end;

-----------------------------------------------------------------------------------------------------------------------------------
Der Link wird abgefangen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
if (pos('beleg',request.URL)<>0and (pos('allebeleg',request.URL)=0then begin
  aktiverBeleg:=copy(request.URL,length(request.URL)-1);
  Beleghinzufuegen;
  WritePoolHTML;
  WriteAlleBelegeHTML;
  Loadindikator:= 2;
  LoadHTML();
  WebbrowserAlleBelege.Browser.StopLoad;
  exit;
end

-----------------------------------------------------------------------------------------------------------------------------
Bitte sagt mir, was ihr noch braucht, um mir helfen zu können.

Moderiert von user profile iconMartok: JS-Tags hinzugefügt
Moderiert von user profile iconMartok: Delphi-Tags hinzugefügt