3

我正在使用 scriptaculous 的 Ajax.Autocompleter 进行不同过滤器的搜索。

http://github.com/madrobby/scriptaculous/wikis/ajax-autocompleter

过滤器要求我将数据动态地传递到自动完成器中,我已经从以下链接成功地学会了这样做。

http://www.simpltry.com/2007/01/30/ajaxautocompleter-dynamic-parameters/

现在,我有多个过滤器和一个搜索框。如何让自动完成器在 输入输入但单击新过滤器的情况下发出请求?

这是一个用例来澄清。页面加载完毕,有多个过滤器(只是带有 onclicks 的链接),以及一个附加了自动完成器的输入字段。我键入一个查询并执行自动完成器请求。然后,我单击一个不同的过滤器,我希望使用相同的查询执行另一个请求,但过滤器不同。

或者更简洁地说,我如何让自动完成器在我想要的时候执行请求,而不是依赖于输入来触发它?

4

4 回答 4

3

我还发现 activate() 方法效果很好。这是我的示例代码....

<script type="text/javascript">
    /*<![CDATA[*/

    var autocomp1 = new Ajax.Autocompleter("search", "AjaxResultsListPlaceholder", "ajaxServerSideSearchHandler.php", {
            frequency: 1,
            minChars: 10,
            indicator: "AjaxWorkingPleaseWaitPlaceholder",
            } );


    /*]]>*/
</script>

<form id="theform">
    <input type="text" id="search" name="search" value="" />
    <input type="button" id="btn_search" name="btn_search" value="Search" onclick="autocomp1.activate();" />
    <div id="AjaxWorkingPleaseWaitPlaceholder" style="display: none; border: 1px solid #ffaaaa;">
    </div>
    <div id="AjaxResultsListPlaceholder" style="display: none;; border: 1px solid #aaffaa;">
    </div>

</form>
于 2010-02-05T22:59:46.460 回答
2

回答我自己的问题:假按键。它确保发出请求,并且下拉框变得可见。这是我伪造按键的功能,它考虑了 IE 和 Firefox 的差异。

  function fakeKeyPress(input_id) {
    var input = $(input_id);
    if(input.fireEvent) {
      // ie stuff
      var evt = document.createEventObject();
      evt.keyCode = 67;
      $(input_id).fireEvent("onKeyDown", evt);
    } else { 
      // firefox stuff
      var evt = document.createEvent("KeyboardEvent");
      evt.initKeyEvent('keydown', true, true, null, false, false, false, false, 27, 0);
      var canceled = !$(input_id).dispatchEvent(evt);
    }
  }
于 2008-09-24T20:17:35.727 回答
1
var autoCompleter = new Ajax.Autocompleter(/* exercise for the reader */);
// Magic happens
autoCompleter.activate();
于 2009-11-06T19:08:16.410 回答
1

在查看了 Scriptaculous 源代码以了解按键时会发生什么,我建议您尝试调用onObserverEvent()

var autoCompleter = new Ajax.Autocompleter(/* exercise for the reader */);
// Magic happens
autoCompleter.onObserverEvent();
于 2008-09-24T02:13:06.363 回答