tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
307
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von z0oL
    z0oL z0oL ist offline Mitglied Gold
    Registriert seit
    Mar 2002
    Beiträge
    168
    Hi,

    habs endlich mal hinbekommen, ein autocompleter-Tutorial mit jQuery "hinzubekommen".

    Mein Problem ist jetzt, dass ich gerne mehrere Formulare auf einer Seite hätte, die sich gegenseitig bedingen sollen, also das die Eingabemöglichkeiten nach vorherigen Eingaben basieren.

    Das Script ist wie folgt aufgebaut:

    Der header in der header.php
    PHP-Code:
    <script type="text/javascript" src="jquery-1.2.1.pack.js"></script>
    <script type="text/javascript">
        function lookup(inputString) {
            if(inputString.length == 0) {
                // Hide the suggestion box.
                $('#suggestions').hide();
            } else {
                $.post("rpc.php", {queryString: ""+inputString+""}, function(data){
                    if(data.length >0) {
                        $('#suggestions').show();
                        $('#autoSuggestionsList').html(data);
                    }
                });
            }
        } // lookup
        
        function fill(thisValue) {
            $('#inputString').val(thisValue);
            setTimeout("$('#suggestions').hide();", 200);
        }
    </script> 
    Die Eingabemaske:
    PHP-Code:
        <div>
            <
    form>
                <
    div>
                    
    Type your county:
                    <
    br />
                    <
    input type="text" size="30" value="" id="inputString" onkeyup="lookup(this.value);" onblur="fill();" />
                </
    div>
                
                <
    div class="suggestionsBox" id="suggestions" style="display: none;">
                    <
    img src="upArrow.png" style="position: relative; top: -12px; left: 30px;" alt="upArrow" />
                    <
    div class="suggestionList" id="autoSuggestionsList">
                        &
    nbsp;
                    </
    div>
                </
    div>
            </
    form>
        </
    div
    Der autocompleter:
    PHP-Code:
    <?php
        
        
    // PHP5 Implementation - uses MySQLi.
        // mysqli('localhost', 'yourUsername', 'yourPassword', 'yourDatabase');
        
    $db = new mysqli('localhost''root' ,'''test');
        
        if(!
    $db) {
            
    // Show error if we cannot connect.
            
    echo 'ERROR: Could not connect to the database.';
        } else {
            
    // Is there a posted query string?
            
    if(isset($_POST['queryString'])) {
                
    $queryString $db->real_escape_string($_POST['queryString']);
                
                
    // Is the string length greater than 0?
                
                
    if(strlen($queryString) >0) {
                    
    // Run the query: We use LIKE '$queryString%'
                    // The percentage sign is a wild-card, in my example of countries it works like this...
                    // $queryString = 'Uni';
                    // Returned data = 'United States, United Kindom';
                    
                    // YOU NEED TO ALTER THE QUERY TO MATCH YOUR DATABASE.
                    // eg: SELECT yourColumnName FROM yourTable WHERE yourColumnName LIKE '$queryString%' LIMIT 10
                    
                    
    $query $db->query("SELECT land FROM test WHERE land LIKE '$queryString%' LIMIT 10");
                    if(
    $query) {
                        
    // While there are results loop through them - fetching an Object (i like PHP5 btw!).
                        
    while ($result $query ->fetch_object()) {
                            
    // Format the results, im using <li> for the list, you can change it.
                            // The onClick function fills the textbox with the result.
                            
                            // YOU MUST CHANGE: $result->value to $result->your_colum
                             
    echo '<li onClick="fill(\''.$result->land.'\');">'.$result->land.'</li>';
                         }
                    } else {
                        echo 
    'ERROR: There was a problem with the query.';
                    }
                } else {
                    
    // Dont do anything.
                
    // There is a queryString.
            
    } else {
                echo 
    'There should be no direct access to this script!';
            }
        }
    ?>


    Jetzt die große Frage: Wie bekomme ich das mit den ids hin, so dass sich da nix im Wege steht?

    Sorry, wenn ich mit dieser Frage nerven sollte.

    Vielen Dank im Voraus!
     
    -/ Realität ist nur was für Leute, die mit Drogen nicht zurecht kommen /-

  2. #2
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Moin z0oL
    Zitat Zitat von z0oL Beitrag anzeigen
    Jetzt die große Frage: Wie bekomme ich das mit den ids hin, so dass sich da nix im Wege steht?

    Sorry, wenn ich mit dieser Frage nerven sollte.
    Die Frage nervt nicht

    Das Problem ist ja ansich, dass du auf die IDs verzichten musst, wenn du mehrerer Autocompleter verwenden willst. Das ist kein grosses Problem

    Der Aufbau ist ja immer derselbe....du hast das Eingabefeld in einem <div>
    Der Knoten, der diesem <div> folgt, ist die suggestionsBox, wiederum das 1. <div> der suggestionsBox die suggestionList...beste Vorraussetzungen, um dort durch die Knoten zu Wandern.

    Du musst lookup anstatt des values des Eingabefeldes nur das Einagebfeld selbst als Objekt übergeben:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    function lookup(inputObject)
    {
      //Wert des Eingabefeldes
      var inputValue      = inputObject.value;
      
      //zugehörige suggestionsBox des Eingabefeldes
      var suggestionsBox  = $(inputObject.parentNode).nextAll('div.suggestionsBox').get(0);
      
      //zugehörige suggestionList des Eingabefeldes
      var suggestionList  = $(suggestionsBox).children('div.suggestionList').get(0);
      
      
      //...uswusf.
    }
     

  3. #3
    Avatar von z0oL
    z0oL z0oL ist offline Mitglied Gold
    Registriert seit
    Mar 2002
    Beiträge
    168
    Wie genau implementiere ich das denn? Und wie geanu geht es nach uswusf... weiter? Irgendwie müssen die Formulare ja unterschieden werden.

    Vielleicht mach ich es besser so, dass es für jedes input eine eigene Seite gibt. Würde mir wohl einige Arbeit ersparen, wär aber auch nicht so elegant...
     
    -/ Realität ist nur was für Leute, die mit Drogen nicht zurecht kommen /-

  4. #4
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Zitat Zitat von z0oL Beitrag anzeigen
    Irgendwie müssen die Formulare ja unterschieden werden.
    Wie hattest du denn vor, die Formulare zu Unterscheiden?
    Aus deinem Code geht nichts dergleichen hervor.

    Mit meinem Vorschlag hättest du per inputObject.form einen Zeiger auf das dem Input zugehörige Formular.
     

Ähnliche Themen

  1. Formulare aus HTML Dokument heraus parsen
    Von Refereen im Forum Java
    Antworten: 2
    Letzter Beitrag: 07.01.06, 00:14
  2. Antworten: 19
    Letzter Beitrag: 27.10.05, 03:55
  3. Mehrere Solver in einem Dokument
    Von JFHunter im Forum Office-Anwendungen
    Antworten: 0
    Letzter Beitrag: 26.05.05, 10:45
  4. Antworten: 1
    Letzter Beitrag: 12.04.05, 14:40
  5. Antworten: 1
    Letzter Beitrag: 13.05.04, 23:18