退格键按下Jquery ui自动完成文本框不会删除任何字母吗?

Paw*_*wan 8 jquery jquery-autocomplete

这是我的文本字段,我正在使用自动完成功能.

  <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;
});
Run Code Online (Sandbox Code Playgroud)

一切正常,但我面临的问题是,当对textinput进行一些选择并尝试做退格时,它不会删除任何字符(我猜它的发出请求,所以它继续更新框)

能告诉我怎么解决这个问题吗?

这是我在keypress上调用的函数

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;
  }
}
Run Code Online (Sandbox Code Playgroud)

dsa*_*ket 7

也许你的脚本没有检测到backspace.

试试这个,

onkeydown="return nospecialCharacters(event)"
Run Code Online (Sandbox Code Playgroud)

代替

onkeypress="return nospecialCharacters(event)"
Run Code Online (Sandbox Code Playgroud)

keypress事件是(原文IE的形式,和在Safari /铬)大约的实际字符被添加到文本域.由于backspace键不会向字段值添加新字符,因此不会导致任何keypress事件.

在你的nospecialCharacters()函数内部,添加keycode == 8允许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;
  }
Run Code Online (Sandbox Code Playgroud)


RRK*_*RRK 5

添加退格键(8)的密钥代码,如果需要,我建议添加tab(9)和其他键,如箭头,页面向上,向下翻页,主页,结束等.

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;
}
Run Code Online (Sandbox Code Playgroud)