按下jQuery ui自动完成文本框上的Backspace键不会删除任何字母吗?

问题描述 投票:8回答:2

这是我使用自动完成功能的文本字段。

  <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;
});

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

您能否让我知道如何解决这个问题?

这是我在按键上调用的函数

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;
  }
}
jquery jquery-autocomplete
2个回答
8
投票

也许您的脚本没有检测到backspace

尝试这样做,

onkeydown="return nospecialCharacters(event)"

而不是

onkeypress="return nospecialCharacters(event)"

keypress事件是(以其原始IE形式,在Safari / Chrome中)关于将实际字符添加到文本字段的事件。由于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;
}

5
投票

添加退格键(8)的键代码,如果需要,我建议添加选项卡(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;
}
© www.soinside.com 2019 - 2024. All rights reserved.