javascript自动完成函数

javascript自动完成函数,javascript,Javascript,您好,我有以下代码有问题,我试图使它当您点击输出插入到输入字段。你能帮帮我吗?我已经试了好几个小时了,一点运气都没有 <script type="text/javascript"> var input = $('#CompanyName'); var output = $('#output'); var timer; input.on('keyup', function() { delaySearch(this.value); }); function delaySea

您好,我有以下代码有问题,我试图使它当您点击输出插入到输入字段。你能帮帮我吗?我已经试了好几个小时了,一点运气都没有

<script type="text/javascript">
var input = $('#CompanyName');
var output = $('#output');
var timer;

input.on('keyup', function() {
    delaySearch(this.value); 
});

function delaySearch(keywords) {
    clearTimeout(timer);
    timer = setTimeout(function() {
        performSearch(keywords);
    }, 1000);
}
function performSearch(keywords) {

    $.ajax({
      type: "POST",
      url: "/print/order/search",
      data: { query: keywords },
      cache: false,
      dataType: "json",
      async: true,
      success: function(data) {
        for(var key in data) {
          output.append('<li onclick="fill('+ data[key].ClientName +')">' + data[key].ClientName) + '</li>';
        }
      }
  });
}
function fill(thisValue) {
  input.val(thisValue);
  clearTimeout(timer);
}
</script>

<!-- Text input-->
<div class="form-group">
  <label class="col-md-4 control-label" for="CompanyName">Firma</label>
  <div class="col-md-5">
  <input id="CompanyName" onblur="fill();" name="CompanyName" type="text" placeholder="Firma" class="form-control input-md">
  <ul id="output"></ul>
  <span class="help-block"></span>
  </div>
</div>


Uncaught ReferenceError: somevalue is not defined 

您需要将脚本放在HTML下面。或者将其包装到jQuery Document ready函数中。并确保在脚本

realseanp找到正确答案之前,已在页面上加载jQuery。我会尽量给你解释得更清楚一点。当浏览器开始处理和呈现页面时,它会自顶向下加载。因此,在创建DOM之前,将运行并评估javascript脚本

因此,jquery选择器:
var input=$('#CompanyName')如果要检查它们,它们将是一个空数组。他们找不到#CompanyName元素,因为它尚未呈现

如果您使用jQuery的
$(document).ready()
函数,那么您可以确信,在dom完成呈现之前,您的代码不会运行,因此将按照您的意愿查找元素。因此,最终,您的代码需要更改为:

$(document).ready(function(){
    //Put your code in here.
    //It will then fire once the dom is ready.
});
更新:

此外,还有您的更新。我注意到错误在于没有定义“填充”。填充是您的onclick方法。在呈现dom之后,将对js脚本进行评估。因此,在呈现dom以及呈现带有onclick的标记时,还不存在填充方法。两种解决方案:

  • 将脚本移到dom上方,并放置一个
    var fill
    $(文档)之外。准备好了
    所以本质上:

    变量填充; $(document.ready(function()){ //你的代码 });

  • 不要使用onclick dom属性,而是使用jquery绑定事件 Ionut
  • 为此:

      <ul id="output"><li>Ionut</li></ul>
    

    如果我理解正确,你想点击关于输入字段的文本并将其放入输入字段吗?是的..我整天都在绞尽脑汁..不太明白如何做这部分你得到的确切错误是什么在加载数据后添加
  • 元素?是的js放在底部对于html文件,我只在这里发布了所需的数据,不想白白添加额外的代码。我只发布了我使用js代码的输入部分,因为表单包含大约20个输入。将是一团混乱:-)是的,解决方案是单击,这就是它不起作用的原因。感谢大家花时间阅读我的帖子,并帮助我找到解决方案:D
    $(document).ready(function(){
        //Put your code in here.
        //It will then fire once the dom is ready.
    });
    
      <ul id="output"><li>Ionut</li></ul>
    
     $('#output li').click(function(e) {
         fill(/*your value/*)
     });