0

我正在使用jQuery和bootstrap提供下拉搜索建议。以下是html代码。但是当我在搜索表单中输入内容然后清除表单时。两个表单如图所示。为什么?我是 jQuery 的新手。谢谢你的帮助。

<div class="container">
    <div class="row">
        <div class="span6 offset3">
            <form class="form-search">
                <input type="text" id="month" name="month" class="input-medium search-query">
                <button type="submit" class="btn">Search</button>
                <div id="suggestions">
                </div>
            </form>
        </div>
    </div>
</div>
<script>
jQuery("#month").keyup(function(){
      ajax('search', ['month'], 'suggestions')});
</script>

在此处输入图像描述

编辑: 我正在使用 web2py 框架。这是搜索功能的代码:

def search():
    if not request.vars.month: return dict()
    month_start = request.vars.month
    selected=complete('piracyfinder',month_start)  #this line get the search results
    return DIV(*[DIV(k['title'],
                     _onclick="jQuery('#month').val('%s')" % k['title'],
                     _onmouseover="this.style.backgroundColor='lightblue'",
                     _onmouseout="this.style.backgroundColor='white'"
                     ) for k in selected])
4

2 回答 2

0

if not request.vars.month也适用于monthvar 存在但为空。因此,它正在返回表单。

您需要执行以下操作之一:

  • 让您的“建议”代码位于不同的页面/文件中
  • 向请求中添加isAJAX变量(或其他方式来识别 AJAX 请求)
  • 检查变量是否存在,而不是检查它是否是假的。
于 2013-03-19T04:23:02.460 回答
0

您似乎正在使用相同的函数(即search())来填写建议以及创建表单(尽管该函数在提交时不会处理表单)。根据逻辑,当request.vars.month为空或不存在时,该函数返回一个空字典。这将导致相关视图(即/views/[控制器名称]/search.html)被执行并返回。大概 search.html 视图包含上面显示的 HTML 代码。因此,当您清除输入框时,keyup 处理程序被触发并发送一个空的月份变量,这导致表单的新副本被发送回并插入到“建议”div 中。request.vars.month您可以通过检查是否存在来避免此问题:

if not request.vars.month:
    return '' if 'month' in request.vars else dict()

更好的方法可能只是对搜索表单和建议使用不同的功能,因为它们做完全不同的事情并且不共享任何代码。

于 2013-03-19T13:03:20.787 回答