Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery自动完成,根据输入的字符不同源_Javascript_Jquery_Autocomplete - Fatal编程技术网

Javascript jQuery自动完成,根据输入的字符不同源

Javascript jQuery自动完成,根据输入的字符不同源,javascript,jquery,autocomplete,Javascript,Jquery,Autocomplete,我在文本框中添加了自动完成功能。但这就是问题所在,我希望能够根据是否输入括号使用与对象不同的值。问题是我需要创建类似于州(县)的内容。我选择州(这部分工作正常),但在输入(后,我需要选择县,它不做任何事情,没有错误或什么都没有 这是我的代码: $(function() { $("document").ready(function() { var states = [ { 'state': "New York", 'county': '1' },

我在文本框中添加了自动完成功能。但这就是问题所在,我希望能够根据是否输入括号使用与对象不同的值。问题是我需要创建类似于
州(县)
的内容。我选择州(这部分工作正常),但在输入
后,我需要选择县,它不做任何事情,没有错误或什么都没有

这是我的代码:

  $(function() {
     $("document").ready(function() {

    var states = [
        { 'state': "New York", 'county': '1' },
        { 'state': "New York", 'county': '1a' },
        { 'state': "New York", 'county': '1b' },
        { 'state': "Florida", 'county': '2' },
        { 'state': "Florida", 'county': '2a' },
        { 'state': "Florida", 'county': '2b' },
        { 'state': "Florida", 'county': '3' },
        { 'state': "Alaska", 'county': '4' },
        { 'state': "Alaska", 'county': '5' },
        { 'state': "Hawaii", 'county': '6' },
        { 'state': "Hawaii", 'county': '7' },
        { 'state': "Maine", 'county': '8' },
        { 'state': "Maine", 'county': '9' },
        { 'state': "Maine", 'county': '10' }
    ];
function split(val) {
  return val.split(/,\s*/);
}

function extractLast(term) {
  return split(term).pop();
}

$('#text').on('keypress', function(e) {
  theKeyCode = e.which;

  // if (e.which !== 40) { // I tried this too ------------
  if (String.fromCharCode(e.which) !== '(') { // Just trying something different

    $(e.target)
      .autocomplete({
        minLength: 0,
        autoFocus: true,
        source: function(request, response) {
          var lastEntry = extractLast(request.term);
          var filteredArray = $.map(states, function(item) {
            if (item.state.indexOf(lastEntry) === 0) {
              return item.state;

            } else {
              return null;
            }
          });
          response($.ui.autocomplete.filter(filteredArray, lastEntry));
        },
        focus: function() {
          return false;
        },
        select: function(event, ui) {
          var terms = split(this.value);
          terms.pop();
          terms.push(ui.item.value);
          terms.push("");
          this.value = terms.join("");

          return false;
        }
      }).on("keydown", function(event) {
        if (event.keyCode === $.ui.keyCode.TAB /** && $(this).data("ui-autocomplete").menu.active **/ ) {
          event.preventDefault();
          return;
        }
        var newY = $(this).textareaHelper('caretPos').top + (parseInt($(this).css('font-size'), 10) * 1.5);
        var newX = $(this).textareaHelper('caretPos').left;
        var posString = "left+" + newX + "px top+" + newY + "px";
        $(this).autocomplete("option", "position", {
          my: "left top",
          at: posString
        });
      });
  } else {

    console.log(e.which); //This shows the right e.which
    $('#text').autocomplete("destroy"); // Just experimenting. It doesn't work with or without it
    $(e.target)
      .autocomplete({
        minLength: 0,
        autoFocus: true,
        source: function(request, response) {
          var lastEntry = extractLast(request.term);
          var filteredArray = $.map(states, function(item) {
            if (item.county.indexOf(lastEntry) === 0) {
              return item.county;
            } else {
              return null;
            }
          });
          response($.ui.autocomplete.filter(filteredArray, lastEntry));
        },
        focus: function() {
          return false;
        },
        select: function(event, ui) {
          var terms = split(this.value);
          terms.pop();
          terms.push(ui.item.value);
          terms.push("");
          this.value = terms.join("), ");
          return false;
        }
      }).on("keydown", function(event) {
        if (event.keyCode === $.ui.keyCode.TAB) {
          event.preventDefault();
          return;
        }
        var newY = $(this).textareaHelper('caretPos').top + (parseInt($(this).css('font-size'), 10) * 1.5);
        var newX = $(this).textareaHelper('caretPos').left;
        var posString = "left+" + newX + "px top+" + newY + "px";
        $(this).autocomplete("option", "position", {
          my: "left top",
          at: posString
        });
      });
  } //e.preventDefault();
});



 });
});

我知道这里有一些问题,比如当我输入州名时,同一个条目显示了好几次,但我稍后会处理,我只是想确定我正在尝试做的是可能的。提前感谢。

这似乎有效:非常整洁,非常接近,但似乎只起作用一次。将在同样的文本框。我应该在我的第一个问题上提到。谢谢。