Dynamische Seite, JavaScript Funktion.

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Dynamische Seite, JavaScript Funktion.

    Hallo,

    ich versuche für meine Tabellenansicht eine Filter Funktion zu schreiben und möchte die Anzahl der Filter immer um 1 erweitern, sobald eine Verknöpfung in der vorherigen Zeile ausgewählt wird.
    Dazu verwende ich diese JavaScript Funktion:

    Quellcode

    1. function ExpandFilter(tbl, select_id, columns, operators, links){
    2. var oval = $(select_id).selectedIndex; //Versuche diesen Effekt zu fixieren. (ohne erfolg)
    3. if($(select_id).value != 'no'){
    4. var nid = $(select_id).getAttribute('id').match("filter_"+tbl+"_linker([0-9]*)");
    5. var nid = parseInt(nid[1])+1;
    6. if(!$('filter_'+tbl+'_column'+nid)){
    7. $('filter_'+tbl+'_settings').innerHTML += '<br>' +
    8. '<select class=select id="filter_'+tbl+'_column'+nid+'">' + columns + '</select>' +
    9. '<select class=select id="filter_'+tbl+'_operator'+nid+'">' + operators + '</select>' +
    10. '<input type=text class=select id="filter_'+tbl+'_value'+nid+'" size=25 value=1 />' +
    11. '<select class=select id="filter_'+tbl+'_linker'+nid+
    12. '" onchange="ExpandFilter(\''+tbl+'\', this, \''+columns+'\', \''+operators+'\', \''+links+'\');">' + links + '</select>';
    13. }
    14. }
    15. $(select_id).selectedIndex = oval; //Versuche diesen Effekt zu fixieren. (ohne erfolg)
    16. }
    Alles anzeigen


    Es funktioniert auch so wie es soll bis auf 1ne Nebenwirkung bei der ich keine Idee habe wie man es wegbekommen könnte.

    Die Nebenwirkung ist, dass jedes Mal wen eine neue Zeile hinzugefügt wird(diese Funktion erfolgreich aufgerufen wird.) die Einstellungen in den vorherigen Zeilen verloren gehen und zu den default Einstellungen wechseln.

    Die Parameter in der ersten Zeile werden per PHP mit Text gefüllt.
    (Nebenfrage: Gibt es in diesem Forum Expander->Ja:Wie ist die Syntax dafür?

    Quellcode

    1. function WriteFilter(){
    2. $out = "<div class=filter id=\"".$this->id."-filter\">";
    3. $out .= "<label class=filter_label>Filter</label>";
    4. $out .= "<div class=filter_settings id=\"filter_".$this->id."_settings\">";
    5. //Spalten
    6. $out .= "<select class=select id=\"filter_".$this->id."_column0\">";
    7. $columns = "<option selected value=".$this->pkey.">ID</option>";
    8. for($i = 0; $i < count($this->row_names); $i++){
    9. $columns .= "<option value=".$this->row_names[$i]->name.">".$this->row_names[$i]->label."</option>";
    10. }
    11. $out .= $columns;
    12. $out .= "</select>";
    13. //Operatoren
    14. $out .= "<select class=select id=\"filter_".$this->id."_operator0\">";
    15. $operators = "<option value=less>kleiner</option>";
    16. $operators .= "<option value=more>gr&ouml;ser</option>";
    17. $operators .= "<option value=same>gleich</option>";
    18. $operators .= "<option value=not>nicht gleich</option>";
    19. $operators .= "<option value=lesssame>kleiner gleich</option>";
    20. $operators .= "<option selected value=moresame>gr&ouml;ser gleich</option>";
    21. $operators .= "<option value=like>wie</option>";
    22. $operators .= "<option value=notlike>nicht wie</option>";
    23. $operators .= "<option value=is>ist</option>";
    24. $operators .= "<option value=isnot>ist nicht</option>";
    25. $operators .= "<option value=between>zwischen</option>";
    26. $out .= "$operators</select>";
    27. //Value
    28. $out .= "<input type=text class=select id=\"filter_".$this->id."_value0\" size=25 value=1 />";
    29. //Verknöpfung
    30. $links = "<option selected value=no> </option>";
    31. $links .= "<option value=and>UND</option>";
    32. $links .= "<option value=or>ODER</option>";
    33. $links .= "<option value=xor>XODER</option>";
    34. $out .= "<select class=select id=\"filter_".$this->id."_linker0\" onchange=\"ExpandFilter('".$this->id."', this, '$columns', '$operators', '$links');\">";
    35. $out .= "$links</select>";
    36. $out .= "</div></div>";
    37. return $out;
    38. }
    Alles anzeigen