代码之家  ›  专栏  ›  技术社区  ›  Yako

脚本式ajax自动完成空响应

  •  3
  • Yako  · 技术社区  · 17 年前

    我的目标是在现有项的编辑函数和未找到项的创建函数之间重定向。

    我向每个li插入一个特定的id,因此我可以使用它作为带有afterUpdateElement选项的编辑函数。

    我正在考虑测试ajax请求发送的完整值。 但我没有找到如何抓住它

    2 回复  |  直到 14 年前
        1
  •  1
  •   Yako    17 年前

    因此,我终于找到了一种检查结果是否被选中的方法(在Gwyohm的大力帮助下):

    1. 首先,我们设置了一个隐藏字段,该字段将记录是否选择了结果(真/假)。默认情况下,它设置为FALSE。
    2. 如果用户更改搜索字段值,对于未选择的全新值,将不使用afterUpdateElement,并且我们的隐藏值仍设置为TRUE。 解决这个问题的办法是听一听按下的键。如果按下某个键,则隐藏字段变回FALSE。这适用于所有关键点,甚至实际用于进行选择的Enter关键点。所以这是我们应该从按键侦听器中删除的一个例外。

      $(文本字段的id)。观察(“键控”,函数(e){


      如果(e)keycode=e,则为else;
      如果(键码!=13){

      $(隐藏字段的id)。value=“FALSE”;

      }

    注意:使用此解决方案,如果用户键入与现有值匹配的值,而未选择该值,则该值将被视为新值,并且如果将此值添加到数据库中,将导致重复条目。(但这对我来说没问题,因为我正在研究名字,两个不同的人可能有相同的名字……)

        2
  •  1
  •   andi    17 年前

    Ajax.Autocompleter.prototype.updateChoices =  function (choices) {
    if(!this.changed && this.hasFocus) {
    
          if(!choices) {
            //do your "new item" thing here
          }
          else {
             this.update.innerHTML = choices;
             Element.cleanWhitespace(this.update);
             Element.cleanWhitespace(this.update.down());
    
             if(this.update.firstChild && this.update.down().childNodes) {
               this.entryCount =
                 this.update.down().childNodes.length;
               for (var i = 0; i < this.entryCount; i++) {
                 var entry = this.getEntry(i);
                 entry.autocompleteIndex = i;
                 this.addObservers(entry);
               }
             } else {
               this.entryCount = 0;
             }
    
             this.stopIndicator();
             this.index = 0;
    
             if(this.entryCount==1 && this.options.autoSelect) {
               this.selectEntry();
               this.hide();
             } else {
               this.render();
             }
          }
       }
    }
    

    在controls.js中覆盖不是一个好主意。相反,您可以将其添加到一个新的.js中,并将其包含在库之后。

    编辑:pff。。很抱歉缩进不好,但它是从TextMate复制/粘贴的,并且带有制表符和空格。不过我希望你能明白这一点。我只加了一句

          if(!choices) {
            //do your "new item" thing here
          }
          else {}
    

    块另外,我没有测试代码,但我认为它应该可以工作。