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

时间:2015-06-23 18:59:52

标签: jquery jquery-autocomplete

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

func getTokenFromUrl(url: String) -> String? {

    let range1 = url.rangeOfString("#access_token")

    if let range = range1 {

        let startIndex = range.endIndex.successor()
        let rangeOfToken = url.endIndex

        let rangeOfString = startIndex ..< rangeOfToken

       return  url.substringWithRange(rangeOfString)
    }
    return nil
}

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

你能告诉我如何解决这个问题吗?

这是我在keypress上调用的函数

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

2 个答案:

答案 0 :(得分:7)

Maybe your script isn't detecting the backspace.

Try doing this,

onkeydown="return nospecialCharacters(event)"

instead of

onkeypress="return nospecialCharacters(event)"

The keypress event is (in its original IE form, and in Safari/Chrome) about an actual character being added to a text field. As backspace key doesn't add a new character to the field value, so it causes no keypress event.

Also inside your nospecialCharacters() function, add keycode == 8 to allow 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;
  }

答案 1 :(得分: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;
}