Avatar billede coool.dk Nybegynder
02. februar 2011 - 18:06 Der er 1 kommentar og
1 løsning

auto complete script ændring

Hej jeg har flg. javascript som gør at man i et felt kan færdiggøre f.eks. brugernavn, ved at trykke på Tab knappen.
Men dette virker selvfølgelig ikke i IE.. er der nogen der kan lave et workarround til det gerne i prototype.js

            <script>
              // takes a text field and an array of strings for autocompletion
              function autocomplete(input, data) {
                if (input.value.length == input.selectionStart && input.value.length == input.selectionEnd) {
                  var candidates = []
                  // filter data to find only strings that start with existing value
                  for (var i=0; i < data.length; i++) {
                    if (data[i].indexOf(input.value) == 0 && data[i].length > input.value.length)
                      candidates.push(data[i])
                  }
                 
                  if (candidates.length > 0) {
                    // some candidates for autocompletion are found
                    if (candidates.length == 1) input.value = candidates[0]
                    else input.value = longestInCommon(candidates, input.value.length)
                    return true
                  }
                }
                return false
              }
             
              // finds the longest common substring in the given data set.
              // takes an array of strings and a starting index
              function longestInCommon(candidates, index) {
                var i, ch, memo
                do {
                  memo = null
                  for (i=0; i < candidates.length; i++) {
                    ch = candidates[i].charAt(index)
                    if (!ch) break
                    if (!memo) memo = ch
                    else if (ch != memo) break
                  }
                } while (i == candidates.length && ++index)
               
                return candidates[0].slice(0, index)
              }
             
              function getData() {
                return document.getElementById('data').value.split("\n")
              }
             
              var input = document.getElementById('messagetext')
             
              // catch TAB keypresses in text input
              input.addEventListener('keydown', function(e) {
                if (e.keyCode == 9 && autocomplete(this, getData())) e.preventDefault()
              }, false)
             
              input.focus()
            </script>
Avatar billede coool.dk Nybegynder
02. juli 2011 - 10:17 #1
burde nok lukke
Avatar billede Slettet bruger
02. juli 2011 - 13:14 #2
Det er nok fordi iE er lidt sær omkring events..
- de overføres ikke som parameter, men skal pilles ud af window-objectet.
Og som om det ikke var nok, så bruger iE "which" i stedet for "keyCode"

Prøv at ændre:

input.addEventListener('keydown', function(e) {
  if (e.keyCode == 9 && autocomplete(this, getData())) e.preventDefault()
              }, false)

Til:

input.addEventListener('keydown', function(e) {
  e = e || window.event
  var key = e.keyCode || e.which

  if (e.key == 9 && autocomplete(this, getData())) e.preventDefault()
              }, false)

NB: Jeg siger ikke at ovenstående vil få det hele til at spille perfekt : )
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester