Forum > Klientspråk > JavaScript
Zupp fellas!
Har gjort en enkel jquery.autocomplete-sök åt en kund (kan tyvärr inte visa sidan). Nu är det såhär att vanligtvis brukar sökresultaten dyka upp i en lista med z-index under Textrutan eller nåt liknande. Men jag har ändrat om lite i grytan då jag ville placera sökresultaten på en annan plats. Därför har jag ändrat jquery.autocomplete.js på en rad bara. Och det är rad 577:
http://www.aspsidan.se/code/default.asp?c=24410
Där kör jag en:
appendTo("#SearchResults")Det är en kul kod du har gett, 700rader kod att börja debuga utan att ens veta HTML strukturen på dina aktuella sida, hur långt kommer du i koden, firebug kan sätta en debug key som i .NET (och andra språk, men du jobbar i .NET).
Vad är needsInit när du trycker på F5? Körs funktionen init() vid en F5 ens?
Jag ber dig även, om möjligt: Generera en HTML sida som påminner om din kundssida, plocka bort allt "hemligt"(eller irellevant kod) som du inte vill dela med dig. Så man kan själv se vad problemet kan vara, jag är en sådan person som måste ha ett exempel för att se hur det fungera in action för att ge ett mer korrekt svar,
Om det är så att diven inte skapas inne i #SearchResults, se bara till att den skapas utanför funktionen, att den även gör en kontroll att den finns.
Ge i alla fall ett exempel man kan gå efter, en array med datan eller hur man binder innehållet i denna plugin.
Haha, menade ju inte att ni skulle kolla igenom varje rad, utan endast 10-12 st som init() är. Tog med hela filen då de flesta ställer följdfrågan: "Kan du visa oss mer kod?".
HTML-koden består ju bara av en div ( SearchResults ) samt en input där man skriver söksträngen.
Har debuggat javascriptet via Visual Studio och init() körs inte när du klickat F5 och försöker söka, i så fall hade div:en visats med alla sökresultat.
Har du nåt förslag på hur jag ändrar om i koden om jag vill att init() ska köras vid varje "sidladdning"?
init() bör köras vid varje omladdning, det är ju vad init (Initialize), kör hellre debug i firebug.
jag kör den jag tror du kör på (enligt det jag har hittat)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<link rel="stylesheet" href="http://dev.jquery.com/view/trunk/pl...e/demo/main.css" type="text/css" />
<link rel="stylesheet" href="http://dev.jquery.com/view/trunk/pl...utocomplete.css" type="text/css" />
<script type="text/javascript" src="http://dev.jquery.com/view/trunk/pl...bgiframe.min.js"></script>
<script type="text/javascript" src="http://dev.jquery.com/view/trunk/pl...y.dimensions.js"></script>
<script type="text/javascript" src="http://dev.jquery.com/view/trunk/pl...autocomplete.js"></script>
<script>
$(document).ready(function(){
var data = "Core Selectors Attributes Traversing Manipulation CSS Events Effects Ajax Utilities".split(" ");
$("#example").autocomplete(data);
});
</script>
</head>
<body>
API Reference: <input id="example" /> (try "C" or "E")
</body>
</html>
En sak du kan testa är att lägga in ett par alert() för att se om den gå in i INIT eller inte. Vad har du modifierat mer i orginal koden?
Du kan inte referera till en autocomplete-fil på nätet då jag har lagt till "appendTo()", det är det som spökar. När du gjort det, och testar klicka på F5 och ska söka igen så appendas resultaten inte i div:en.
Spelar absolut ingen roll: http://voigt.se/sandbox/autocomplete/ lägger den i en div med din ID, och kan fortfarande (tyvärr) inte återskapa ditt problem (testat i firefox endast dock).
Redigerad av voigtan
Anledning:
När anropar du din autoComplete?
Hur menar du nu? Problemet är ju appendTo(), så den måste finnas med i din JS-fil, inte bara i html-koden.
Och det har jag:
.appendTo("#SearchResults");Känner att jag måste be om ursäkt ;-)
Du fick mig att inse att problemet måste ligga nån annanstans, och så kom jag på att jag sätter focus på min sökruta i min form-tagg: defaultfocus="tbSearch", när jag tog bort detta funkade det perfekt.
Kan du förklara varför? För jag kan fan inte se nån förklaring.
Kan du testa att köra jquery för att markera istället för defaultFocus (?) har aldrig i vanlig HTML om detta, är förmodligen något .NET gör :P
You did it again. Tack som fan voigtan.
Ett annat problem jag märkte med söken nu är att den inte gör anrop mot min generic handler vid varje bokstav jag skriver. Om jag skriver "Jes" så kanske 10 resultat kommer fram, men fortsätter jag att skriva: "Jessica", så söker den inte vid varje knapptryckning. Bara "ibland", det är faktiskt det bästa sättet jag kan uttrycka mig, den anropar min generic handler ibland. (Detta ser jag självklart i Firebug).
På ett sätt tror jag inte att det är min Generic Handler det är fel på, kan man inte lägga till nån extra-funktion som anropar autocomplete() vid varje KeyUp typ? Men nu kan det vara så att det är min Generic handler det är fel på, så jag bifogar kod här. (Den är smutsig, ska städa den vid ett senare tillfälle)
Min Generic Handler-kod:
http://www.aspkoll.se/code/Index.asp?id=512
Jag tror den faktist kör anropen varje gång, du borde se det i ajax snurran, den hinner inte kasta tillbaka ett svar innan its "outdated", men det kan också vara så att funktionen inte triggar en ajax snurra förrän den har fått OK från förra snurran, vilket låter konstigt, hinner inte kolla kodan, har lite bättre saker på min födelsedag än att ha jobbat i 13 timmar redan :P
Haha varför sa du inte det från början voigt ;-)
Grattis som fan! Ta det lugnt med boozen.
Dricka? pfff Har inte tid med det, skall sova för imorgon är det firma-aktiviteter i Danmark ;) och lördag bröllop God I have no spare time :P
Redigerad av voigtan
Anledning:
Om man kollar deras key-binding så är det vid keypress+keydown så det är nog helt enkelt att du skriver för fort :P
Så fort den hittat ett sökresultat, om du söker på "mon" så kommer mona sahlin upp, och många fler. Men fortsätter man skriva "mona sah.." så söker den inte, de funna resultaten är fortfarande kvar, inga resten filtreras inte bort. Det körs ju inget anrop till Handlern, och jag skriver inte för fort. Testade skriva en bokstav med 10 sekunders intervall ;-)
Hur ser koden ut när du anropar ajax datan? Du generera inte direkt ut en JSON objekt i din kod, har du ändrat någon annan kod ifrån orginal koden?