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請求)
  • 檢查變量是否存在,而不是檢查它是否是虛假的。
相關問題