webForumDet fria alternativet

Autosuggest fungerar inte

5 svar · 552 visningar · startad av dreas

dreasMedlem sedan jan. 2004140 inlägg
#1

Hej!

Har hittat ett litet och effektivt autosuggest med integrering till PHP på följande länk;
http://woork.blogspot.com/2008/03/php-components-autosuggest.html

Allt funkar tipp topp efter lite korrigeringar så att den söker på flera kolumner i databasen osv. Men problemet är att när rätt sökresultat dyker upp nedan som ett förslag, så ska man ju självklart kunna klicka på denna så att autosuggest scriptet fulländar texten utan att man behöver fylla i allt.
Det verkar nämligen inte fungera som det ska. Följande är min databas kod (som är det enda jag har modifierat):

<?php 
	include('config.php'); 
	
	$searchq		=	strip_tags($_GET['q']);
	$getRecord_sql	=	'
	SELECT player.firstname AS player_fname, player.lastname AS player_lname
	FROM player
	WHERE (player.firstname LIKE "'.$searchq.'%" OR player.lastname LIKE "'.$searchq.'%")
	';
	$getRecord		=	mysql_query($getRecord_sql);
	
	if(strlen($searchq)>0){

		echo '<ul>';
		while ($row = mysql_fetch_array($getRecord)) {
			echo ("<li><a href=\"#\">".$row['player_fname']." ".$row['player_lname']."</a></li>");
		} 
		echo '</ul>';
	} 
?>

Och så här ser JS/XML koden ut (EJ redigerad):

/* ---------------------------- */
/* XMLHTTPRequest Enable 		*/
/* ---------------------------- */
function createObject() {
	var request_type;
	var browser = navigator.appName;
	if(browser == "Microsoft Internet Explorer"){
	request_type = new ActiveXObject("Microsoft.XMLHTTP");
	}else{
		request_type = new XMLHttpRequest();
	}
		return request_type;
}

var http = createObject();

/* -------------------------- */
/* SEARCH					 */
/* -------------------------- */
function autosuggest() {
q = document.getElementById('search-q').value;
// Set te random number to add to URL request
nocache = Math.random();
http.open('get', 'lib/search.php?q='+q+'&nocache = '+nocache);
http.onreadystatechange = autosuggestReply;
http.send(null);
}
function autosuggestReply() {
if(http.readyState == 4){
	var response = http.responseText;
	e = document.getElementById('results');
	if(response!=""){
		e.innerHTML=response;
		e.style.display="block";
	} else {
		e.style.display="none";
	}
}
}

Vad är det jag missar? Är ingen hacker på javascrpit/xml/ajax, så hjälp behövs verkligen! Kan tillägga att form taggen ser ut på följande sätt:

<input name="search-q" id="search-q" type="text" onkeyup="javascript:autosuggest()"/>

Tacksam för all hjäpl!

NoiseMakerMedlem sedan sep. 2001171 inlägg
#2

Fast vad händer när du klickar på nått i elementet "respons"? Antingen måste det skapats en evenhandler som du glömde visa för oss eller så finns det en onclick på det elementet "respons" har i sig. Allt hänger på vad som utförst när användaren klickar på nått i response.

dreasMedlem sedan jan. 2004140 inlägg
#3

Hej igen,
Ledsen för att jag varit lite inaktiv med tråden (är på resande fot).
Jag kollade igenom koderna igen av det jag hämtat hem från ovanstående adress och det är inget jag har missat att skriva in i denna tråd. Kanske då CSS på den sida input:en visas, men det ska ju inte vara några konstigheter.

Och då jag är halvgrön inom XML tänket förstår jag inte till 100% vad du menar NoiseMaker, men jag fattar det som att i scriptet så finns det i dagsläget inget onclick event i responsen (det läser jag som, det finns inget som säger vad som ska hända när du klickar på något i sökresultatet).

Jag hade uppskattat det extremt mycket om någon hade kunnat hjälpa mig på traven med att skapa en sådan response till ovanstående kod.

dreasMedlem sedan jan. 2004140 inlägg
#4

Måste bumpa denna tråd och höra igen, finns det ingen som kan skicka mig i rätt riktning? Löser problemet om jag får en knuff till hur jag ska gå tillväga. Ska jag skriva en ny funktion? integrera lösningen i nuvarande funktioner? eller hur ska jag göra?

SPiNMedlem sedan mars 20007 896 inlägg
#5

Du måste ha en eventhandler på din a-tagg som skickas från PHP-sidan.

...
        while ($row = mysql_fetch_array($getRecord)) {
            echo ("<li><a href=\"#\" [b]onclick=\"document.getElementById('search-q').value='" . $row['player_fname'] . "';\"[/b]>".$row['player_fname']." ".$row['player_lname']."</a></li>");
        }
...

Se det fetmarkerade avsnittet. :)

dreasMedlem sedan jan. 2004140 inlägg
#6

Hail to the SPiN!
Tack björn, hehe, börjar bli en vana detta!
Var rätt självklart att det måste finnas en onclick, vet inte vad jag tänkte på egentligen. Men men, nu fungerar det kalasfint! TUSEN TACK!

Enkelt att lägga till flera sökargument i onclick, nedanstående exemplet läggs player_lname i onclick argumentet (för er som är nyfikna på koden):

<a href=\"#\" onclick=\"document.getElementById('search-q').value='" . $row['player_fname'] . " ". $row['player_lname']."';\">

Tack björn!

292 ms totalt · 3 externa anrop · v20260731065814-full.0e50b1ef
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
290 ms — hämta tråd, inlägg och bilagor (db)