2015-06-23 11 views
8

To jest moje pole tekstowe, do którego używam Autouzupełniania.naciśnięcie klawisza Backspace na Jquery ui Autouzupełnianie pola tekstowego nie usuwa żadnych liter na nim?

<input type="text" name="state" id="state" placeholder="State" maxlength="25" required onkeypress="return nospecialCharacters(event)"/> 


$("#state").autocomplete({ 
    source: function(request, response) { 
    var statevalue = $.trim($("#state").val()); 
    if (statevalue) { 
     $.ajax({ 
     url: url + 'eee', 
     dataType: 'jsonp', 
     jsonp: false, 
     timeout: 6000, 
     jsonpCallback: 'jsonCallback', 
      delay: 100, 
     success: function(data) { 
      $("#state").empty(); 
      response(data); 
     } 
     }); 
    } 
    }, 
    minLength: 2, 
    appendTo: "#state_result", 
     select: function (event, ui) { 
          $("#state").val(ui.item.label); 
       $("#city").focus(); 
       return false; 
      }, 
           close: function(event, ui) 
         $(this).data().term = null; 
}); 

Wszystko działa poprawnie, ale problem jestem stoi to, że gdy jakiś wybór dokonywany jest na TextInput i spróbować zrobić Backspace, nie usuwa żadnych znaków (chyba jego przygotowywania wniosków, a więc aktualizuj pudełko)

Czy możesz dać mi znać, jak rozwiązać ten problem?

To jest moja funkcja nazywa się przy naciśnięciu

function nospecialCharacters(thi, dec) 
{ 
    if (window.event) keycode = window.event.keyCode; 
    else if (e) keycode = e.which; 
    else return true; 
    if (((keycode >= 65) && (keycode <= 90)) || ((keycode >= 48) && (keycode <= 57)) || ((keycode >= 97) && (keycode <= 122)) || keycode == 32 || keycode == 45 || keycode == 47 || keycode == 92) 
    { 
    return true; 
    } 
    else 
    { 
    return false; 
    } 
} 
+0

Ze wszystkich elementów, które nie zostały wyświetlone, najpierw sprawdzam "nospecialCharacters". –

+0

Czy można tworzyć pakiety dodatkowe, jsfiddle http://jsfiddle.net do demonstrowania? – guest271314

+0

@ WumpusQ.Wumbley, dodałem funkcję nospecialCharacters. – Pawan

Odpowiedz

7

Może twój skrypt nie wykrywa backspace.

spróbować zrobić to,

onkeydown="return nospecialCharacters(event)" 

zamiast

onkeypress="return nospecialCharacters(event)" 

Impreza keypress jest (w jego pierwotnej formie IE i Safari/Chrome) o rzeczywistej charakteru dodaje do tekstu pole. Jako klucz backspace nie dodaje nowego znaku do wartości pola, więc nie powoduje zdarzenia keypress.

Również wewnątrz funkcji nospecialCharacters(), dodać keycode == 8 aby umożliwić backspace,

if (((keycode >= 65) && (keycode <= 90)) || ((keycode >= 48) && (keycode <= 57)) || ((keycode >= 97) && (keycode <= 122)) || keycode == 32 || keycode == 45 || keycode == 47 || keycode == 92 || keycode == 8) 
    { 
    return true; 
    } 
    else 
    { 
    return false; 
    } 
5

Dodaj klucz-kod Backspace (8), a jeśli potrzebna Radzę, aby dodać zakładki (9) i inne klucze takie jak strzałki, strona w górę, strona w dół, strona główna, koniec itd.

var keyCodeArray = [92, 8, 9]; //keycode 8-backspace, 9-tab, delete-46 
for(i = 32; i <= 40; i++) keyCodeArray.push(i); //arrows, pageup, pagedown, home, end 
for(i = 45; i <= 57; i++) keyCodeArray.push(i); 
for(i = 65; i <= 90; i++) keyCodeArray.push(i); 
for(i = 97; i <= 122; i++) keyCodeArray.push(i); 

function nospecialCharacters(thi, dec) { 
    if(window.event) keycode = window.event.keyCode; 
    else if(e) keycode = e.which; 
    else return true; 
    console.log(keycode); 
    return $.inArray(keycode, keyCodeArray) != -1 ? true : false; 
} 
Powiązane problemy