WinFuture-Forum.de: jQuery ui autocomplete - zusätzliche Formularfelder übergeben - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

jQuery ui autocomplete - zusätzliche Formularfelder übergeben


#1 Mitglied ist offline   Mondragor 

  • Gruppe: aktive Mitglieder
  • Beiträge: 391
  • Beigetreten: 22. Februar 12
  • Reputation: 44
  • Geschlecht:Männlich

geschrieben 10. November 2014 - 14:31

Hallo,

ich habe ein Formular, in dem verschiedene Felder aus "selbstlernenden Datenbanken" vervollständigt werden können.
Nun ist es manchmal so, dass hinter der entsprechenden Datenbankabfrage auch mehrere Felder hängen, die die Auswahl einschränken sollen. Allerdings brauche ich dafür den frisch ausgelesenen Wert der entsprechenden Formularspalte, da die $("#feldname").autocomplete(...); bereits onload gesetzt wird.
Weiß jemand, wie man für "jquery ui" weitere parameter mit "autocomplete" an die "source:"-Datei pvergeben kann? Wie ich an den aktuellen Wert im Formular rankäme, wüsste ich dann schon.
Falls das erst ab einer bestimmten Version oder mit bestimmten Paketen von JQuery oder JQuery UI geht, wäre ein Link auf die entsprechenden versionen hilfreich.


Grüße,
Mondragor

Dieser Beitrag wurde von Mondragor bearbeitet: 10. November 2014 - 14:39

0

Anzeige



#2 Mitglied ist offline   aeris 

  • Gruppe: aktive Mitglieder
  • Beiträge: 129
  • Beigetreten: 06. September 08
  • Reputation: 12
  • Geschlecht:unbekannt

geschrieben 10. November 2014 - 18:28

Source kann auch eine Funktion sein.

$('#suche').autocomplete({
	source: function(request, response) {
		$.ajax({
			url: '/query',
			dataType: 'json',
			data: {
				param1: request.term,
				param2: $('#feld1').val(), 
				param3: $('#feld2').val()
			},
			success: function(data) {
				response(data);
			}
		});
	}
});

Dieser Beitrag wurde von aeris bearbeitet: 10. November 2014 - 18:31

1

#3 Mitglied ist offline   Mondragor 

  • Gruppe: aktive Mitglieder
  • Beiträge: 391
  • Beigetreten: 22. Februar 12
  • Reputation: 44
  • Geschlecht:Männlich

geschrieben 10. November 2014 - 20:06

Vielen Dank schonmal für die Antwort.
Ich habe nun immer für die Datenbankabfrage eine php-datei genutzt, geht das auf diesem Wege auch??
Und wenn ja, wie binde ich diese ein?

Grüße

Dieser Beitrag wurde von Mondragor bearbeitet: 10. November 2014 - 20:07

0

#4 Mitglied ist offline   aeris 

  • Gruppe: aktive Mitglieder
  • Beiträge: 129
  • Beigetreten: 06. September 08
  • Reputation: 12
  • Geschlecht:unbekannt

geschrieben 10. November 2014 - 21:38

Das kommt darauf an was deine php Datei macht.

Wie machst dus denn jetzt?
1

#5 Mitglied ist offline   Mondragor 

  • Gruppe: aktive Mitglieder
  • Beiträge: 391
  • Beigetreten: 22. Februar 12
  • Reputation: 44
  • Geschlecht:Männlich

geschrieben 11. November 2014 - 08:50

Hallo,

ich mache das momentan über:
Javascript/jQuery ui:
$("input#feld1").autocomplete(
{
  source: "feld1.php",
  minChars: 1
});


und in "feld1.php" steht sowas wie

<?php
mysql_connect("localhost", "name", "Passwort") or die("Keine Verbindung zur Datenbank möglich.");
mysql_select_db("datenbankname") or die("Die Datenbank existiert nicht.");

//Der Parameter, der ohnehin an source uebergeben wird:
$term = isset($_REQUEST['term']) ? trim($_REQUEST['term']) : '';
//Dieser Parameter soll aber auch uebergeben werden!
$feld1= isset($_REQUEST['feld1']) ? trim($_REQUEST['feld1']) : '';
if (!empty($term))
{  
  $term = utf8_decode(mysql_real_escape_string($term ));
  $feld1= utf8_decode(mysql_real_escape_string($feld1));
  //nun folgt die Datenbankabfrage ohne Einbeziehung von $feld1
  //Ich möchte aber $feld1 übergeben bekommen und es mit in die WHERE-Bedingung einbeziehen.
  $sql = mysql_query("SELECT DISTINCTROW 
                        `term` 
                      FROM 
                        `term-feld1` 
                      WHERE 
                        `term` LIKE '$term%' 
                      ORDER BY 
                        `term` 
                      ASC 
                      LIMIT 
                        0,15;");
  $results = array();
  while($row = mysql_fetch_object($sql))
  {
    $results[] = utf8_encode($row->term);
  }
  echo json_encode($results);
}
?>



Also Ziel ist, an die Datenbank mehrere Bedingungen zu schicken, um die Auswahl vorher schon einzugrenzen.
Die Parameter in der WHERE-Bedingung sind nicht statisch sondern ergeben sich aus den bereits gefüllten Feldern $("#feld1") bis $("#feldn").
Nun ist die Frage, ob man das mit der von Dir vorgeschlagenen Vorgehensweise so weiter behandeln kann oder
was ich anpassen / ändern muss, damit ich voran komme.

Grüße,
Mondragor
0

#6 Mitglied ist offline   Mondragor 

  • Gruppe: aktive Mitglieder
  • Beiträge: 391
  • Beigetreten: 22. Februar 12
  • Reputation: 44
  • Geschlecht:Männlich

geschrieben 11. November 2014 - 10:12

Okay, ich habe die Lösung.

Die PHP-Datei bleibt bis auf die Abfrageanpassung im WHERE-Teil gleich.


$("input#feld2").autocomplete({
            source: function(request, response) {
                $.ajax({
                  url: 'feld1.php',
                  dataType: "json",
                  data: {
                    term : request.term,
                    feld1 : $('#feld1').val()
                  },
                  success: function(data) {
                    response(data);
                  }
                });
            },
            minLength: 0}, {

        });



Nun klappt es.
Dies entspricht im Wesentlichen Deinem Vorschlag, also vielen herzlichsten Dank!!! @ aeris

Für die Mitleser, die es interessiert:
Die Nomenklatur im von mir getexteten Code ist natürlich nicht original, wie Namen und Passwörter, Variablen- und Dateibezeichnungen.
  • "term" bezeichnet den Parameter, der dem Wert für die Eingabe im "zu autocompletenden" Feld des Formulars entspricht. Dieser heißt für Autocomplete mit externer Quelle IMMER "term". (soweit mir das bisher untergekommen ist.) In meinem Beispiel könnte der Formular-Input-Name für "term" beispielsweise "feld2" sein. In der Codezeile:
    ...
    term : request.term,
    ...
    
    wurde der Bezeichner "term" vorne gewählt, damit die PHP-Datei bleiben kann, wie sie ist. Man hätte sie aber auch abändern und den Parameter "term" stattdessen "fridolin" nennen können.
    request.term beinhaltet aber wieder den term als das Feld, welches aktuell "autocompleten" soll.
  • "feld1" kann heißen, wie man es gerne nennen möge, es muss dann eben entsprechend angepasst werden.
  • "feld1", das sich momentan nicht im fokus befinden kann, weil ja feld2 gerade "autocompleten" soll, sollte im Formular möglichst oberhalb oder links von "feld2" stehen, damit der Wert möglichst bereits eingegeben wurde, wenn "feld2" befüllt wird. Sein aktueller WERT / INHALT steht quasi in >>request.term<<.
  • Die Variablennamen in der PHP-Datei sind frei wählbar, die übergebenen Parameter jedoch, also die Feldindexbezeichner, die in $_REQUEST (Mit request liest man u.a. sowohl $_GET also auch $_POST aus) stehen, müssen der Nomenklatur aus der autocomplete-Definition entsprechen, in diesem Fall: "term" und "feld1".
  • In der gleichen Weise wie hier
    feld1: $("#feld1").val()
    
    kann mit allen anderen Formularfeldern auch vorgegangen werden, die Konvention ist
    bezeichner: wert
    und die verschiedenen Parameter sind durch Kommata voneinander zu trennen.
  • minLength ist ein Parameter der autocomplete-optionen und gibt an, wie viele Buchstaben in Formularfeld "feld2" bereits eingegeben worden sein müssen, bevor der Autocomplete durchgeführt werden soll. Je nach Anzahl der in Frage kommenden Einträge kann es hier sinnvoll sein, größere Zahlen zu wählen. Auch bei oft wiederholenden Pfäfixen, wie einer Auftragsnummer, die mit der Jahreszahl beginnt, kann das sinnvoll sein.
  • Die letzten geschweiften Klammern müssen nicht sein, zumindest funktioniert es bei mir auch ohne die, in dem Fall sind die letzten Zeilen:
    minLength: 0
            }); 
    

Dieser Beitrag wurde von Mondragor bearbeitet: 11. November 2014 - 11:09

0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0