WN

WN (https://www.wn.se/forum/index.php)
-   Klientsidans teknologier, design och grafik (https://www.wn.se/forum/forumdisplay.php?f=12)
-   -   AJAX-problem (https://www.wn.se/forum/showthread.php?t=25333)

andi 2007-11-27 12:15

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

orreborre 2007-11-27 14:04

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.

andi 2007-11-27 14:45

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='';         
           
      } 
     
    }


orreborre 2007-11-27 15:04

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.

jonny 2007-11-27 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?

orreborre 2007-11-27 15:15

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.

grazzy 2007-11-27 15:27

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

andi 2007-11-27 15:29

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 2007-11-27 16:49

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!


Alla tider är GMT +2. Klockan är nu 15:59.

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