Kom ihåg mig?
Home Menu

Menu


AJAX-problem

Ämnesverktyg Visningsalternativ
Oläst 2007-11-27, 12:15 #1
andi andi är inte uppkopplad
Flitig postare
 
Reg.datum: Jun 2006
Inlägg: 344
andi andi är inte uppkopplad
Flitig postare
 
Reg.datum: Jun 2006
Inlägg: 344
Jag har en AJAX-sökfunktion på en sida där sökresultatet uppdateras medans man skriver. Sökresultatet består av länkar men det krävs att man klickar två gånger på en länk för att något skall hända, både i IE och FF. Det är som att det DIV-element som innehåller länkarna måste få fokus innan någonting funkar. Om jag klickar i resultatdiven en gång och sedan på en länk så funkar det.

/Andreas
andi är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-11-27, 14:04 #2
orreborres avatar
orreborre orreborre är inte uppkopplad
Flitig postare
 
Reg.datum: Apr 2003
Inlägg: 309
orreborre orreborre är inte uppkopplad
Flitig postare
orreborres avatar
 
Reg.datum: Apr 2003
Inlägg: 309
Det skulle vara enklare om du ger info om vilken ajax-lösning du kör, även om jag inte tror att det är relaterat till ajax.
Det bästa vore om du kunde visa hur sidan ser ut, eller en länk till denna.
orreborre är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-11-27, 14:45 #3
andi andi är inte uppkopplad
Flitig postare
 
Reg.datum: Jun 2006
Inlägg: 344
andi andi är inte uppkopplad
Flitig postare
 
Reg.datum: Jun 2006
Inlägg: 344
Såhär ser själva anropet från sidan ut. Denna kod fungerar och jag får ett sökresultat varje gång.
Finns det någon Javascript-metod för att "uppdatera" ett element. Alltså något man måste anropa efter att man har
lagt till HTML-kod i sökresultat-DIVen för att webläsaren skall "hitta" den?


Kod:
  function search() {
     

       var searchterm = document.getElementById("searchfield").value;      
           
 
       if(searchterm.length > 1) {      
 
         if (window.XMLHttpRequest) {               
           var xmlhttp=new XMLHttpRequest();
         } else if (window.ActiveXObject) {            
           var xmlhttp=new ActiveXObject('Microsoft.XMLHTTP');
         }

         if (xmlhttp) {
           xmlhttp.onreadystatechange = function updatedesearchresult() {
             if (xmlhttp.readyState==4) {
               if (xmlhttp.status==200) {
                 document.getElementById("res").innerHTML=xmlhttp.responseText;
               }
             }
           }

           xmlhttp.open("GET", "search.php?search=" + searchterm, true);
           xmlhttp.send("");
         }
       
       } else {
          document.getElementById("ajres").innerHTML='';           
            
       }  
       
     }
andi är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-11-27, 15:04 #4
orreborres avatar
orreborre orreborre är inte uppkopplad
Flitig postare
 
Reg.datum: Apr 2003
Inlägg: 309
orreborre orreborre är inte uppkopplad
Flitig postare
orreborres avatar
 
Reg.datum: Apr 2003
Inlägg: 309
Jadu, jag kan inte svara på varför det blir som det blir.
Var ligger focus efter sökningen?
Söker du på onkeyup eller genom att någon klickar på en knapp?

Om du inte söker på onkeyup kan du prova att skriva document.getElementById("res").focus(); efter innerHTML-raden. Botar inte källan till problemet, men hanterar antagligen symptomen.
orreborre är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-11-27, 15:11 #5
jonny jonny är inte uppkopplad
Supermoderator
 
Reg.datum: Sep 2003
Inlägg: 6 941
jonny jonny är inte uppkopplad
Supermoderator
 
Reg.datum: Sep 2003
Inlägg: 6 941
Läste någonstans att innerHTML inte var att rekommendera. Är det i den kod du generar där som det blir fel?
jonny är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-11-27, 15:15 #6
orreborres avatar
orreborre orreborre är inte uppkopplad
Flitig postare
 
Reg.datum: Apr 2003
Inlägg: 309
orreborre orreborre är inte uppkopplad
Flitig postare
orreborres avatar
 
Reg.datum: Apr 2003
Inlägg: 309
Citat:
Originally posted by jonny@Nov 27 2007, 15:11
Läste någonstans att innerHTML inte var att rekommendera. Är det i den kod du generar där som det blir fel?
innerHTML är inte standardiserat, även om alla stora webbläsare stödjer det. Det är i många fall snabbare än DOM-funktionerna, men det är ju egentligen en fullösning som går bredvid den standard som finns.

Det bästa är att använda createElement, append m.fl. för att uppdatera innehållet i en nod.


andi: Glöm det jag sa om focus(), det är bara tänkt till form-element.
orreborre är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-11-27, 15:27 #7
grazzy grazzy är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Mar 2004
Inlägg: 3 471
grazzy grazzy är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Mar 2004
Inlägg: 3 471
Varför använder du inte ett färdigt bibliotek för att hantera ajax och de här grejerna? Du slipper en massa tänkbara felkällor iom att andra har löst problemen åt dig.

Scriptaculous + prototype kör jag med. Rekommenderas varmt. Just det du försöker lösa finns här: http://wiki.script.aculo.us/scriptaculous/...x.Autocompleter
grazzy är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-11-27, 15:29 #8
andi andi är inte uppkopplad
Flitig postare
 
Reg.datum: Jun 2006
Inlägg: 344
andi andi är inte uppkopplad
Flitig postare
 
Reg.datum: Jun 2006
Inlägg: 344
Citat:
Originally posted by jonny@Nov 27 2007, 16:11
Läste någonstans att innerHTML inte var att rekommendera. Är det i den kod du generar där som det blir fel?
Nja, det blir liksom inte fel, allting ser ut som det ska, sökresultaten kommer fram medans jag skriver men jag måste som sagt först flytta fokus till det DIV-element som innehåller resultatet innan musen fungerar i den DIV-en. Klickar jag i DIVen en gång så fungerar allt, länkar, markering etc. Men om jag tex klickar på en länk det första jag gör efter en sökning så händer det inget. Klickar jag en gång till så fungerar allt som vanligt.
andi är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-11-27, 16:49 #9
andi andi är inte uppkopplad
Flitig postare
 
Reg.datum: Jun 2006
Inlägg: 344
andi andi är inte uppkopplad
Flitig postare
 
Reg.datum: Jun 2006
Inlägg: 344
Nu är det löst! Jag hade sökning på både onchange och onkeyup och då visste tydligen inte webläsaren om musen var nere eller uppe och det var väl därför jag var tvungen att klicka en gång först för att kunna få "upp" muspekaren..

Angående innerHTML kontra DOM så är det många som säger att man skall passa sig för innerHTML men jag har aldrig fått uppfattningen att det skulle vara instabilt och innerHTML implementeras ju mer enhetligt i de olika webläsarna än sådant som finns standardiserat. Det är ju också snabbare än DOM samt väldigt mycket lättare att implementera.

Tack för alla snabba svar!
andi är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 11:22.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017