0

我使用jQuery和引导来给下拉搜索suggestions.Following是html代码。但当我在搜索窗体中键入的东西,然后清除窗体。两个窗体apears如图片。为什么?我是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> 

enter image description here

编辑: 我使用的web2py framwork.This是搜索功能的代码:

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]) 
+0

ajax()函数是什么? – kennypu 2013-03-19 02:09:46

回答

0

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

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

一个更好的办法可能只是使用的搜索形式不同的功能和给定的,他们这样做完全不同的事情,不共享任何代码的建议。

0

if not request.vars.month也适用于month VAR现有不过是空的。因此,它正在返回表单。

你需要做的其中之一:

  • 有你“的建议”的代码在不同的网页/文件
  • 添加isAJAX变量请求(或其他方式来确定AJAX请求)
  • 检查变量是否存在,而不是检查它是否是虚假的。
相关问题