Ankündigung

Einklappen
Keine Ankündigung bisher.

AutoSuggest mit Callback Funktion

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • AutoSuggest mit Callback Funktion

    Hallo Leute!

    Ich möchte eine Ajax AutoSuggest Funktion nutzen, dessen Scripts ich mir hier: Ajax auto-suggest / auto-complete | BrandSpankingNew

    runtergeladen habe.

    Soweit funktioniert auch alles, ausser dass ich ein Veränderung vornehmen möchte.
    Wenn jemand etwas sucht und es dann mit Hilfe der Vorschläge findet und anklickt, dann möchte ich nicht dass die Variable ins Suchfeld übernommen wird, sondern direkt mit dem Click zu einer bestimmten URL geschickt wird. Und für jeden Suchbegriff gibt es dann einen anderen direkten Link.

    Ist das möglich? Wenn ja wie?

    Hier der aktuelle PHP-Code:

    PHP-Code:
    <?php

    /*
    note:
    this is just a static test version using a hard-coded countries array.
    normally you would be populating the array out of a database

    the returned xml has the following structure
    <results>
        <rs>foo</rs>
        <rs>bar</rs>
    </results>
    */


        
    $aUsers = array(
            
    "Ädams, Egbert",
            
    "Altman, Alisha",
            
    "Archibald, Janna",
            
    "Auman, Cody",
            
    "Bagley, Sheree",
            
    "Ballou, Wilmot",
            
    "Bard, Cassian",
            
    "Bash, Latanya",
            
    "Beail, May",
            
    "Black, Lux",
            
    "Bloise, India",
            
    "Blyant, Nora",
            
    "Bollinger, Carter",
            
    "Burns, Jaycob",
            
    "Carden, Preston",
            
    "Carter, Merrilyn",
            
    "Christner, Addie",
            
    "Churchill, Mirabelle",
            
    "Conkle, Erin",
            
    "Countryman, Abner",
            
    "Courtney, Edgar",
            
    "Cowher, Antony",
            
    "Craig, Charlie",
            
    "Cram, Zacharias",
            
    "Cressman, Ted",
            
    "Crissman, Annie",
            
    "Davis, Palmer",
            
    "Downing, Casimir",
            
    "Earl, Missie",
            
    "Eckert, Janele",
            
    "Eisenman, Briar",
            
    "Fitzgerald, Love",
            
    "Fleming, Sidney",
            
    "Fuchs, Bridger",
            
    "Fulton, Rosalynne",
            
    "Fye, Webster",
            
    "Geyer, Rylan",
            
    "Greene, Charis",
            
    "Greif, Jem",
            
    "Guest, Sarahjeanne",
            
    "Harper, Phyllida",
            
    "Hildyard, Erskine",
            
    "Hoenshell, Eulalia",
            
    "Isaman, Lalo",
            
    "James, Diamond",
            
    "Jenkins, Merrill",
            
    "Jube, Bennett",
            
    "Kava, Marianne",
            
    "Kern, Linda",
            
    "Klockman, Jenifer",
            
    "Lacon, Quincy",
            
    "Laurenzi, Leland",
            
    "Leichter, Jeane",
            
    "Leslie, Kerrie",
            
    "Lester, Noah",
            
    "Llora, Roxana",
            
    "Lombardi, Polly",
            
    "Lowstetter, Louisa",
            
    "Mays, Emery",
            
    "Mccullough, Bernadine",
            
    "Mckinnon, Kristie",
            
    "Meyers, Hector",
            
    "Monahan, Penelope",
            
    "Mull, Kaelea",
            
    "Newbiggin, Osmond",
            
    "Nickolson, Alfreda",
            
    "Pawle, Jacki",
            
    "Paynter, Nerissa",
            
    "Pinney, Wilkie",
            
    "Pratt, Ricky",
            
    "Putnam, Stephanie",
            
    "Ream, Terrence",
            
    "Rumbaugh, Noelle",
            
    "Ryals, Titania",
            
    "Saylor, Lenora",
            
    "Schofield, Denice",
            
    "Schuck, John",
            
    "Scott, Clover",
            
    "Smith, Estella",
            
    "Smothers, Matthew",
            
    "Stainforth, Maurene",
            
    "Stephenson, Phillipa",
            
    "Stewart, Hyram",
            
    "Stough, Gussie",
            
    "Strickland, Temple",
            
    "Sullivan, Gertie",
            
    "Swink, Stefanie",
            
    "Tavoularis, Terance",
            
    "Taylor, Kizzy",
            
    "Thigpen, Alwyn",
            
    "Treeby, Jim",
            
    "Trevithick, Jayme",
            
    "Waldron, Ashley",
            
    "Wheeler, Bysshe",
            
    "Whishaw, Dodie",
            
    "Whitehead, Jericho",
            
    "Wilks, Debby",
            
    "Wire, Tallulah",
            
    "Woodworth, Alexandria",
            
    "Zaun, Jillie"
        
    );
        
        
        
    $aInfo = array(
            
    "Bedfordshire",
            
    "index.html",
            
    "Cambridgeshire",
            
    "Cheshire",
            
    "Cornwall",
            
    "Cumbria",
            
    "Derbyshire",
            
    "Devon"
            
    "Dorset"
            
    "Durham"
            
    "East Sussex",
            
    "Essex",
            
    "Gloucestershire",
            
    "Hampshire",
            
    "Hertfordshire"
            
    "Kent"
            
    "Lancashire",
            
    "Leicestershire",
            
    "Lincolnshire",
            
    "Norfolk",
            
    "Northamptonshire",
            
    "Northumberland"
            
    "North Yorkshire"
            
    "Nottinghamshire",
            
    "Oxfordshire",
            
    "Shropshire",
            
    "Somerset",
            
    "Staffordshire",
            
    "Suffolk"
            
    "Surrey",
            
    "Warwickshire",
            
    "West Sussex",
            
    "Wiltshire",
            
    "Worcestershire"
            
    "Durham"
            
    "East Sussex",
            
    "Essex",
            
    "Gloucestershire",
            
    "Hampshire",
            
    "Hertfordshire"
            
    "Kent"
            
    "Lancashire",
            
    "Leicestershire",
            
    "Lincolnshire",
            
    "Norfolk",
            
    "Northamptonshire",
            
    "Northumberland"
            
    "North Yorkshire"
            
    "Nottinghamshire",
            
    "Oxfordshire",
            
    "Shropshire",
            
    "Somerset",
            
    "Staffordshire",
            
    "Suffolk"
            
    "Surrey",
            
    "Warwickshire",
            
    "West Sussex",
            
    "Wiltshire",
            
    "Worcestershire"
            
    "Durham"
            
    "East Sussex",
            
    "Essex",
            
    "Gloucestershire",
            
    "Hampshire",
            
    "Hertfordshire"
            
    "Kent"
            
    "Lancashire",
            
    "Leicestershire",
            
    "Lincolnshire",
            
    "Norfolk",
            
    "Northamptonshire",
            
    "Northumberland"
            
    "North Yorkshire"
            
    "Nottinghamshire",
            
    "Oxfordshire",
            
    "Shropshire",
            
    "Somerset",
            
    "Staffordshire",
            
    "Suffolk"
            
    "Surrey",
            
    "Warwickshire",
            
    "West Sussex",
            
    "Wiltshire",
            
    "Worcestershire"
            
    "Durham"
            
    "East Sussex",
            
    "Essex",
            
    "Gloucestershire",
            
    "Hampshire",
            
    "Hertfordshire"
            
    "Kent"
            
    "Lancashire",
            
    "Leicestershire",
            
    "Lincolnshire",
            
    "Norfolk",
            
    "Northamptonshire",
            
    "Northumberland"
            
    "North Yorkshire"
            
    "Nottinghamshire"
        
    );
        
        
        
    $input strtolower$_GET['input'] );
        
    $len strlen($input);
        
    $limit = isset($_GET['limit']) ? (int) $_GET['limit'] : 0;
        
        
        
    $aResults = array();
        
    $count 0;
        
        if (
    $len)
        {
            for (
    $i=0;$i<count($aUsers);$i++)
            {
                
    // had to use utf_decode, here
                // not necessary if the results are coming from mysql
                //
                
    if (strtolower(substr(utf8_decode($aUsers[$i]),0,$len)) == $input)
                {
                    
    $count++;
                    
    $aResults[] = array( "id"=>($i+1) ,"value"=>htmlspecialchars($aUsers[$i]), "info"=>htmlspecialchars($aInfo[$i]) );
                }
                
                if (
    $limit && $count==$limit)
                    break;
            }
        }
        
        
        
        
        
        
    header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past
        
    header ("Last-Modified: " gmdate("D, d M Y H:i:s") . " GMT"); // always modified
        
    header ("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
        
    header ("Pragma: no-cache"); // HTTP/1.0
        
        
        
        
    if (isset($_REQUEST['json']))
        {
            
    header("Content-Type: application/json");
        
            echo 
    "{\"results\": [";
            
    $arr = array();
            for (
    $i=0;$i<count($aResults);$i++)
            {
                
    $arr[] = "{\"id\": \"".$aResults[$i]['id']."\", \"value\": \"".$aResults[$i]['value']."\", \"info\": \"\"}";
            }
            echo 
    implode(", "$arr);
            echo 
    "]}";
        }
        else
        {
            
    header("Content-Type: text/xml");

            echo 
    "<?xml version=\"1.0\" encoding=\"utf-8\" ?><results>";
            for (
    $i=0;$i<count($aResults);$i++)
            {
                echo 
    "<rs id=\"".$aResults[$i]['id']."\" info=\"".$aResults[$i]['info']."\">".$aResults[$i]['value']."</rs>";
            }
            echo 
    "</results>";
        }
    ?>

    Vielleicht macht sich ja jemand die Mühe und durchforstet mal die Geschichte. Würde mich sehr über eine Hilfestellung freuen!

    Bye und Gruß aus Berlin


  • #2
    Das hat nicht direkt was mit PHP zutun. Denn die Weiterleitung beim Klick auf einen Eintrag muss JavaScript vornehmen! Das sollte eigentlich nicht so schwer sein, den Teil der den angeklickten Wert ins INPUT Feld einfügt kannst du entfernen und entsprechend dort die window.location neu setzen (also weiterleiten).

    Kommentar


    • #3
      Hi Florian,

      viele Dank für deine schnelle Antwort.

      Kannst du mal einen Blick auf den JS-Code werfen?

      /**
      * author: Timothy Groves - Brand Spanking New: It's about design, web development, art, usability, CSS, JavaScript and some other stuff
      * version: 1.2 - 2006-11-17
      * 1.3 - 2006-12-04
      * 2.0 - 2007-02-07
      * 2.1.1 - 2007-04-13
      * 2.1.2 - 2007-07-07
      * 2.1.3 - 2007-07-19
      *
      */


      if (typeof(bsn) == "undefined")
      _b = bsn = {};


      if (typeof(_b.Autosuggest) == "undefined")
      _b.Autosuggest = {};
      else
      alert("Autosuggest is already set!");












      _b.AutoSuggest = function (id, param)
      {
      // no DOM - give up!
      //
      if (!document.getElementById)
      return 0;




      // get field via DOM
      //
      this.fld = _b.DOM.gE(id);

      if (!this.fld)
      return 0;




      // init variables
      //
      this.sInp = "";
      this.nInpC = 0;
      this.aSug = [];
      this.iHigh = 0;




      // parameters object
      //
      this.oP = param ? param : {};

      // defaults
      //
      var k, def = {minchars:1, meth:"get", varname:"input", className:"autosuggest", timeout:4500, delay:500, offsety:-5, shownoresults: true, noresults: "No results!", maxheight: 250, cache: true, maxentries: 25};
      for (k in def)
      {
      if (typeof(this.oP[k]) != typeof(def[k]))
      this.oP[k] = def[k];
      }


      // set keyup handler for field
      // and prevent autocomplete from client
      //
      var p = this;

      // NOTE: not using addEventListener because UpArrow fired twice in Safari
      //_b.DOM.addEvent( this.fld, 'keyup', function(ev){ return pointer.onKeyPress(ev); } );

      this.fld.onkeypress = function(ev){ return p.onKeyPress(ev); };
      this.fld.onkeyup = function(ev){ return p.onKeyUp(ev); };

      this.fld.setAttribute("autocomplete","off");
      };
















      _b.AutoSuggest.prototype.onKeyPress = function(ev)
      {

      var key = (window.event) ? window.event.keyCode : ev.keyCode;



      // set responses to keydown events in the field
      // this allows the user to use the arrow keys to scroll through the results
      // ESCAPE clears the list
      // TAB sets the current highlighted value
      //
      var RETURN = 13;
      var TAB = 9;
      var ESC = 27;

      var bubble = 1;

      switch(key)
      {
      case RETURN:
      this.setHighlightedValue();
      bubble = 0;
      break;

      case ESC:
      this.clearSuggestions();
      break;
      }

      return bubble;
      };



      _b.AutoSuggest.prototype.onKeyUp = function(ev)
      {
      var key = (window.event) ? window.event.keyCode : ev.keyCode;



      // set responses to keydown events in the field
      // this allows the user to use the arrow keys to scroll through the results
      // ESCAPE clears the list
      // TAB sets the current highlighted value
      //

      var ARRUP = 38;
      var ARRDN = 40;

      var bubble = 1;

      switch(key)
      {


      case ARRUP:
      this.changeHighlight(key);
      bubble = 0;
      break;


      case ARRDN:
      this.changeHighlight(key);
      bubble = 0;
      break;


      default:
      this.getSuggestions(this.fld.value);
      }

      return bubble;


      };








      _b.AutoSuggest.prototype.getSuggestions = function (val)
      {

      // if input stays the same, do nothing
      //
      if (val == this.sInp)
      return 0;


      // kill list
      //
      _b.DOM.remE(this.idAs);


      this.sInp = val;


      // input length is less than the min required to trigger a request
      // do nothing
      //
      if (val.length < this.oP.minchars)
      {
      this.aSug = [];
      this.nInpC = val.length;
      return 0;
      }




      var ol = this.nInpC; // old length
      this.nInpC = val.length ? val.length : 0;



      // if caching enabled, and user is typing (ie. length of input is increasing)
      // filter results out of aSuggestions from last request
      //
      var l = this.aSug.length;
      if (this.nInpC > ol && l && l<this.oP.maxentries && this.oP.cache)
      {
      var arr = [];
      for (var i=0;i<l;i++)
      {
      if (this.aSug[i].value.substr(0,val.length).toLowerCase() == val.toLowerCase())
      arr.push( this.aSug[i] );
      }
      this.aSug = arr;

      this.createList(this.aSug);



      return false;
      }
      else
      // do new request
      //
      {
      var pointer = this;
      var input = this.sInp;
      clearTimeout(this.ajID);
      this.ajID = setTimeout( function() { pointer.doAjaxRequest(input) }, this.oP.delay );
      }

      return false;
      };





      _b.AutoSuggest.prototype.doAjaxRequest = function (input)
      {
      // check that saved input is still the value of the field
      //
      if (input != this.fld.value)
      return false;


      var pointer = this;


      // create ajax request
      //
      if (typeof(this.oP.script) == "function")
      var url = this.oP.script(encodeURIComponent(this.sInp));
      else
      var url = this.oP.script+this.oP.varname+"="+encodeURICompon ent(this.sInp);

      if (!url)
      return false;

      var meth = this.oP.meth;
      var input = this.sInp;

      var onSuccessFunc = function (req) { pointer.setSuggestions(req, input) };
      var onErrorFunc = function (status) { alert("AJAX error: "+status); };

      var myAjax = new _b.Ajax();
      myAjax.makeRequest( url, meth, onSuccessFunc, onErrorFunc );
      };





      _b.AutoSuggest.prototype.setSuggestions = function (req, input)
      {
      // if field input no longer matches what was passed to the request
      // don't show the suggestions
      //
      if (input != this.fld.value)
      return false;


      this.aSug = [];


      if (this.oP.json)
      {
      var jsondata = eval('(' + req.responseText + ')');

      for (var i=0;i<jsondata.results.length;i++)
      {
      this.aSug.push( { 'id':jsondata.results[i].id, 'value':jsondata.results[i].value, 'info':jsondata.results[i].info } );
      }
      }
      else
      {

      var xml = req.responseXML;

      // traverse xml
      //
      var results = xml.getElementsByTagName('results')[0].childNodes;

      for (var i=0;i<results.length;i++)
      {
      if (results[i].hasChildNodes())
      this.aSug.push( { 'id':results[i].getAttribute('id'), 'value':results[i].childNodes[0].nodeValue, 'info':results[i].getAttribute('info') } );
      }

      }

      this.idAs = "as_"+this.fld.id;


      this.createList(this.aSug);

      };














      _b.AutoSuggest.prototype.createList = function(arr)
      {
      var pointer = this;




      // get rid of old list
      // and clear the list removal timeout
      //
      _b.DOM.remE(this.idAs);
      this.killTimeout();


      // if no results, and shownoresults is false, do nothing
      //
      if (arr.length == 0 && !this.oP.shownoresults)
      return false;


      // create holding div
      //
      var div = _b.DOM.cE("div", {id:this.idAs, className:this.oP.className});

      var hcorner = _b.DOM.cE("div", {className:"as_corner"});
      var hbar = _b.DOM.cE("div", {className:"as_bar"});
      var header = _b.DOM.cE("div", {className:"as_header"});
      header.appendChild(hcorner);
      header.appendChild(hbar);
      div.appendChild(header);




      // create and populate ul
      //
      var ul = _b.DOM.cE("ul", {id:"as_ul"});




      // loop throught arr of suggestions
      // creating an LI element for each suggestion
      //
      for (var i=0;i<arr.length;i++)
      {
      // format output with the input enclosed in a EM element
      // (as HTML, not DOM)
      //
      var val = arr[i].value;
      var st = val.toLowerCase().indexOf( this.sInp.toLowerCase() );
      var output = val.substring(0,st) + "<em>" + val.substring(st, st+this.sInp.length) + "</em>" + val.substring(st+this.sInp.length);


      var span = _b.DOM.cE("span", {}, output, true);
      if (arr[i].info != "")
      {
      var br = _b.DOM.cE("br", {});
      span.appendChild(br);
      var small = _b.DOM.cE("small", {}, arr[i].info);
      span.appendChild(small);
      }

      var a = _b.DOM.cE("a", { href:"index.html" });

      var tl = _b.DOM.cE("span", {className:"tl"}, " ");
      var tr = _b.DOM.cE("span", {className:"tr"}, " ");
      a.appendChild(tl);
      a.appendChild(tr);

      a.appendChild(span);

      a.name = i+1;
      a.onclick = function () { pointer.setHighlightedValue(); return false; };
      a.onmouseover = function () { pointer.setHighlight(this.name); };

      var li = _b.DOM.cE( "li", {}, a );

      ul.appendChild( li );
      }


      // no results
      //
      if (arr.length == 0 && this.oP.shownoresults)
      {
      var li = _b.DOM.cE( "li", {className:"as_warning"}, this.oP.noresults );
      ul.appendChild( li );
      }


      div.appendChild( ul );


      var fcorner = _b.DOM.cE("div", {className:"as_corner"});
      var fbar = _b.DOM.cE("div", {className:"as_bar"});
      var footer = _b.DOM.cE("div", {className:"as_footer"});
      footer.appendChild(fcorner);
      footer.appendChild(fbar);
      div.appendChild(footer);



      // get position of target textfield
      // position holding div below it
      // set width of holding div to width of field
      //
      var pos = _b.DOM.getPos(this.fld);

      div.style.left = pos.x + "px";
      div.style.top = ( pos.y + this.fld.offsetHeight + this.oP.offsety ) + "px";
      div.style.width = this.fld.offsetWidth + "px";



      // set mouseover functions for div
      // when mouse pointer leaves div, set a timeout to remove the list after an interval
      // when mouse enters div, kill the timeout so the list won't be removed
      //
      div.onmouseover = function(){ pointer.killTimeout() };
      div.onmouseout = function(){ pointer.resetTimeout() };


      // add DIV to document
      //
      document.getElementsByTagName("body")[0].appendChild(div);



      // currently no item is highlighted
      //
      this.iHigh = 0;






      // remove list after an interval
      //
      var pointer = this;
      this.toID = setTimeout(function () { pointer.clearSuggestions() }, this.oP.timeout);
      };















      _b.AutoSuggest.prototype.changeHighlight = function(key)
      {
      var list = _b.DOM.gE("as_ul");
      if (!list)
      return false;

      var n;

      if (key == 40)
      n = this.iHigh + 1;
      else if (key == 3
      n = this.iHigh - 1;


      if (n > list.childNodes.length)
      n = list.childNodes.length;
      if (n < 1)
      n = 1;


      this.setHighlight(n);
      };



      _b.AutoSuggest.prototype.setHighlight = function(n)
      {
      var list = _b.DOM.gE("as_ul");
      if (!list)
      return false;

      if (this.iHigh > 0)
      this.clearHighlight();

      this.iHigh = Number(n);

      list.childNodes[this.iHigh-1].className = "as_highlight";


      this.killTimeout();
      };


      _b.AutoSuggest.prototype.clearHighlight = function()
      {
      var list = _b.DOM.gE("as_ul");
      if (!list)
      return false;

      if (this.iHigh > 0)
      {
      list.childNodes[this.iHigh-1].className = "";
      this.iHigh = 0;
      }
      };


      _b.AutoSuggest.prototype.setHighlightedValue = function ()
      {
      if (this.iHigh)
      {
      this.sInp = this.fld.value = this.aSug[ this.iHigh-1 ].value;

      // move cursor to end of input (safari)
      //
      this.fld.focus();
      if (this.fld.selectionStart)
      this.fld.setSelectionRange(this.sInp.length, this.sInp.length);


      this.clearSuggestions();

      // pass selected object to callback function, if exists
      //
      if (typeof(this.oP.callback) == "function")
      this.oP.callback( this.aSug[this.iHigh-1] );
      }
      };













      _b.AutoSuggest.prototype.killTimeout = function()
      {
      clearTimeout(this.toID);
      };

      _b.AutoSuggest.prototype.resetTimeout = function()
      {
      clearTimeout(this.toID);
      var pointer = this;
      this.toID = setTimeout(function () { pointer.clearSuggestions() }, 1000);
      };







      _b.AutoSuggest.prototype.clearSuggestions = function ()
      {

      this.killTimeout();

      var ele = _b.DOM.gE(this.idAs);
      var pointer = this;
      if (ele)
      {
      var fade = new _b.Fader(ele,1,0,250,function () { _b.DOM.remE(pointer.idAs) });
      }
      };










      // AJAX PROTOTYPE _____________________________________________


      if (typeof(_b.Ajax) == "undefined")
      _b.Ajax = {};



      _b.Ajax = function ()
      {
      this.req = {};
      this.isIE = false;
      };



      _b.Ajax.prototype.makeRequest = function (url, meth, onComp, onErr)
      {

      if (meth != "POST")
      meth = "GET";

      this.onComplete = onComp;
      this.onError = onErr;

      var pointer = this;

      // branch for native XMLHttpRequest object
      if (window.XMLHttpRequest)
      {
      this.req = new XMLHttpRequest();
      this.req.onreadystatechange = function () { pointer.processReqChange() };
      this.req.open("GET", url, true); //
      this.req.send(null);
      // branch for IE/Windows ActiveX version
      }
      else if (window.ActiveXObject)
      {
      this.req = new ActiveXObject("Microsoft.XMLHTTP");
      if (this.req)
      {
      this.req.onreadystatechange = function () { pointer.processReqChange() };
      this.req.open(meth, url, true);
      this.req.send();
      }
      }
      };


      _b.Ajax.prototype.processReqChange = function()
      {

      // only if req shows "loaded"
      if (this.req.readyState == 4) {
      // only if "OK"
      if (this.req.status == 200)
      {
      this.onComplete( this.req );
      } else {
      this.onError( this.req.status );
      }
      }
      };










      // DOM PROTOTYPE _____________________________________________


      if (typeof(_b.DOM) == "undefined")
      _b.DOM = {};



      /* create element */
      _b.DOM.cE = function ( type, attr, cont, html )
      {
      var ne = document.createElement( type );
      if (!ne)
      return 0;

      for (var a in attr)
      ne[a] = attr[a];

      var t = typeof(cont);

      if (t == "string" && !html)
      ne.appendChild( document.createTextNode(cont) );
      else if (t == "string" && html)
      ne.innerHTML = cont;
      else if (t == "object")
      ne.appendChild( cont );

      return ne;
      };



      /* get element */
      _b.DOM.gE = function ( e )
      {
      var t=typeof(e);
      if (t == "undefined")
      return 0;
      else if (t == "string")
      {
      var re = document.getElementById( e );
      if (!re)
      return 0;
      else if (typeof(re.appendChild) != "undefined" )
      return re;
      else
      return 0;
      }
      else if (typeof(e.appendChild) != "undefined")
      return e;
      else
      return 0;
      };



      /* remove element */
      _b.DOM.remE = function ( ele )
      {
      var e = this.gE(ele);

      if (!e)
      return 0;
      else if (e.parentNode.removeChild(e))
      return true;
      else
      return 0;
      };



      /* get position */
      _b.DOM.getPos = function ( e )
      {
      var e = this.gE(e);

      var obj = e;

      var curleft = 0;
      if (obj.offsetParent)
      {
      while (obj.offsetParent)
      {
      curleft += obj.offsetLeft;
      obj = obj.offsetParent;
      }
      }
      else if (obj.x)
      curleft += obj.x;

      var obj = e;

      var curtop = 0;
      if (obj.offsetParent)
      {
      while (obj.offsetParent)
      {
      curtop += obj.offsetTop;
      obj = obj.offsetParent;
      }
      }
      else if (obj.y)
      curtop += obj.y;

      return {x:curleft, y:curtop};
      };










      // FADER PROTOTYPE _____________________________________________



      if (typeof(_b.Fader) == "undefined")
      _b.Fader = {};





      _b.Fader = function (ele, from, to, fadetime, callback)
      {
      if (!ele)
      return 0;

      this.e = ele;

      this.from = from;
      this.to = to;

      this.cb = callback;

      this.nDur = fadetime;

      this.nInt = 50;
      this.nTime = 0;

      var p = this;
      this.nID = setInterval(function() { p._fade() }, this.nInt);
      };




      _b.Fader.prototype._fade = function()
      {
      this.nTime += this.nInt;

      var ieop = Math.round( this._tween(this.nTime, this.from, this.to, this.nDur) * 100 );
      var op = ieop / 100;

      if (this.e.filters) // internet explorer
      {
      try
      {
      this.e.filters.item("DXImageTransform.Microsoft.Al pha").opacity = ieop;
      } catch (e) {
      // If it is not set initially, the browser will throw an error. This will set it if it is not set yet.
      this.e.style.filter = 'progidXImageTransform.Microsoft.Alpha(opacity='+ieop+')' ;
      }
      }
      else // other browsers
      {
      this.e.style.opacity = op;
      }


      if (this.nTime == this.nDur)
      {
      clearInterval( this.nID );
      if (this.cb != undefined)
      this.cb();
      }
      };



      _b.Fader.prototype._tween = function(t,b,c,d)
      {
      return b + ( (c-b) * (t/d) );
      };

      Der Teil im HTML sieht so aus:

      Code:
      <script type="text/javascript">	
      	
      	var options = {
      		script: "test.php?limit=10&timeout=5000&",
      		varname:"input",
      		shownoresults:true,
      		maxresults:10,
      		callback: function (obj) { document.getElementById('testid').value = obj.id; }
      	};
      	var as_xml = new bsn.AutoSuggest('testinput', options);
      </script>

      Danke!

      Kommentar


      • #4
        Wir sind kein Dienstleistungsforum. Wir helfen dir gerne bei konkreten Problemen aber die Lösung musst du schon selbst zusteuern ...

        Kommentar


        • #5
          Fummel an der Sache schon seit Tagen. Leider fehlen mir wahrscheinlich einige Basiskenntnisse...

          Dachte wenn es für dich kein großes Problem darstellt, wäre es eine Kleinigkeit mir kurz weiter auf die Sprünge zu helfen.

          Danke trotzdem für deine Antworten. Werde es mal an anderer Stelle versuchen.

          Wünsche noch einen angenehmen Tag.

          Kommentar


          • #6
            Zitat von r4lle1882 Beitrag anzeigen
            Fummel an der Sache schon seit Tagen. Leider fehlen mir wahrscheinlich einige Basiskenntnisse...
            Dann wirst du dir diese aneigenen müssen....

            Zitat von r4lle1882 Beitrag anzeigen
            Dachte wenn es für dich kein großes Problem darstellt, wäre es eine Kleinigkeit mir kurz weiter auf die Sprünge zu helfen.
            Das ist halt echt ein Batzen Code, ich wollte mir das durchlesen, nur dann hab ich dem js-Code gesehn und hatte auch keine Lust mehr...
            "My software never has bugs, it just develops random features."
            "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

            Kommentar


            • #7
              Danke Dir Paul trotzdem!

              Kommentar


              • #8
                Viel ist da nicht zu machen eigentlich...

                Code:
                <script type="text/javascript">	
                	
                	var options = {
                		script: "test.php?limit=10&timeout=5000&",
                		varname:"input",
                		shownoresults:true,
                		maxresults:10,
                		callback: function (obj) { document.getElementById('testid').value = obj.id; }
                	};
                	var as_xml = new bsn.AutoSuggest('testinput', options);
                </script>
                Da sieht man ja schon sehr deutlich wo sich die Callback Funktion befindet und was diese als Parameter bekommt und was sie tut.

                Eine Weiterleitung erfolgt in JS sehr leicht:

                document.location.href = 'http://www..........';
                "Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".

                Kommentar


                • #9
                  Ich halte den ganzen Ansatz für falsch. Alle möglichen Datensätze werden in den Speicher geladen. Das mag ja für diese geringen datenmengen ganz hübsch aussehen, aber mach das mal für eine Adressliste mit 14 Mio Datensätzen.
                  PHP-Code:
                  if ($var != 0) {
                    
                  $var 0;

                  Kommentar


                  • #10
                    Zitat von Wolla Beitrag anzeigen
                    Ich halte den ganzen Ansatz für falsch. Alle möglichen Datensätze werden in den Speicher geladen. Das mag ja für diese geringen datenmengen ganz hübsch aussehen, aber mach das mal für eine Adressliste mit 14 Mio Datensätzen.
                    Wenn ich das richtig sehe wird da nur ein bestimmter teil geholt, wegen der Zeile:
                    Code:
                    script: "test.php?limit=10&timeout=5000&",
                    Und mit maxresults werden auch nur 10Einträge geholt
                    "My software never has bugs, it just develops random features."
                    "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

                    Kommentar


                    • #11
                      #1:

                      $aUsers = array(
                      "Ädams, Egbert",
                      "Altman, Alisha",
                      "Archibald, Janna",
                      "Auman, Cody",
                      "Bagley, Sheree",
                      "Ballou, Wilmot",
                      "Bard, Cassian",
                      "Bash, Latanya",
                      usw
                      PHP-Code:
                      if ($var != 0) {
                        
                      $var 0;

                      Kommentar


                      • #12
                        Vielen Dank für die Antworten.

                        Es werden sicherlich nicht so viele Datensätze. Mehr als 1.000 kann ich mir im Moment nicht vorstellen. Es gibt mit Sicherheit bessere Lösungsansätze aber da ich mit meinem Kenntnisstand auf Andere angewiesen bin, war es das fast die einzige Möglichkeit.


                        @Dark Guardian

                        Wie bekomme ich die Weiterleitung mit JS für jeden einzelnen array im PHP-Script hin? Ich brauche für jeden "Vorschlag" einen eigenen href.

                        In dem langen JS-Script gibt es einen Absatz der so aussieht:
                        Code:
                        // create and populate ul
                        //
                        var ul = _b.DOM.cE("ul", {id:"as_ul"});
                        
                        
                        
                        
                        // loop throught arr of suggestions
                        // creating an LI element for each suggestion
                        //
                        for (var i=0;i<arr.length;i++)
                        {
                        // format output with the input enclosed in a EM element
                        // (as HTML, not DOM)
                        //
                        var val = arr[i].value;
                        var st = val.toLowerCase().indexOf( this.sInp.toLowerCase() );
                        var output = val.substring(0,st) + "<em>" + val.substring(st, st+this.sInp.length) + "</em>" + val.substring(st+this.sInp.length);
                        
                        
                        var span = _b.DOM.cE("span", {}, output, true);
                        if (arr[i].info != "")
                        {
                        var br = _b.DOM.cE("br", {});
                        span.appendChild(br);
                        var small = _b.DOM.cE("small", {}, arr[i].info);
                        span.appendChild(small);
                        }
                        
                        var a = _b.DOM.cE("a", { href:"index.html" });
                        
                        var tl = _b.DOM.cE("span", {className:"tl"}, " ");
                        var tr = _b.DOM.cE("span", {className:"tr"}, " ");
                        a.appendChild(tl);
                        a.appendChild(tr);
                        
                        a.appendChild(span);
                        
                        a.name = i+1;
                        a.onclick = function () { pointer.setHighlightedValue(); return false; };
                        a.onmouseover = function () { pointer.setHighlight(this.name); };
                        
                        var li = _b.DOM.cE( "li", {}, a );
                        
                        ul.appendChild( li );
                        }
                        Wenn ich die DICK markierte Zeile mit dem href verändere, funktioniert die Weiterleitung ABER leider nur zu EINEN bestimmten Link.


                        Hoffe das bringt mich etwas weiter. Vielen Dank nochmal für die Hilfestellung.

                        Kommentar


                        • #13
                          Was soll das hier 25 KB Quellcode zu posten?

                          Wenn du keine Ahnung von JS hast eigne dir eben ein Grundwissen an und stell dann gezielt deine Frage. Es gibt doch genuegend jQuery-autocomplete-Plugins mit onItemSelect-Events.
                          "Mein Name ist Lohse, ich kaufe hier ein."

                          Kommentar


                          • #14
                            Guten Abend Chriz,

                            ich hoffe ich habe dir nicht mit meinem 25kb Quellcode den Abend versaut und dein Leben ist sonst nicht so schlimm. Ich z.B. hatte heute eine Weisheitszahn-OP und muss gestehen, dass ich lieber jeden Tag 25kb Quellcodes lese.

                            Hoffentlich kommst du drüber hinweg, dies jemals gelesen zu haben...

                            Kommentar


                            • #15
                              Zitat von r4lle1882 Beitrag anzeigen
                              Guten Abend Chriz,

                              ich hoffe ich habe dir nicht mit meinem 25kb Quellcode den Abend versaut und dein Leben ist sonst nicht so schlimm. Ich z.B. hatte heute eine Weisheitszahn-OP und muss gestehen, dass ich lieber jeden Tag 25kb Quellcodes lese.

                              Hoffentlich kommst du drüber hinweg, dies jemals gelesen zu haben...
                              Javascript Quellcode ist meist nicht gerade leicht zu verstehen und der Batzen von dir da erst recht nicht.

                              Wie gesagt wurde wird ein Input Feld mit einem Wert befüllt. Dies geschieht in der Callback Funktion aus dem kleinem Codestück. Nun ist es doch völlig ausreichend das Stück abzuändern oder nicht?

                              Du siehst in dem Codestück wie der Wert ausgelesen wird der ins Input Feld geschrieben wird. Ich hab dir gepostet wie eine Weiterleitung geht. Aus dem Auslesen des Wertes eine URL mit Get-Parameter zu formen um den Rest per PHP erledigen zu können sollte drin sein wenn man im Fortgeschrittenen Forum postet.
                              "Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".

                              Kommentar

                              Lädt...
                              X