2012-03-28 25 views
1

我在我的Django模板頂部的搜索字段(不帶周圍的表單標籤):選擇性Django的/ jQuery的表單提交

<input name="q" id="id_q" /> 
<input type="submit" id="id_s" value="Search"> 

截至目前,搜索鍵被按下一個按鈕提交或點擊進入:

$(function($) { 
    $(":submit").click(function() { 
     window.location = "{% url search %}?q=" + $("#id_q").val(); 
    }); 
}); 

現在,我將在django-registration。其結果是,我有類似以下的登錄模板:

<form method="post" action=".">{% csrf_token %} 
    {% if form.non_field_errors %} 
     <div class="form_errors"> 
      {% for err in form.non_field_errors %} 
       <div class="form_error_message">{{ err }}</div> 
      {% endfor %} 
     </div> 
    {% endif %} 
    {% for hidden in form.hidden_fields %} 
     {{ hidden }} 
    {% endfor %} 
    {% for field in form.visible_fields %} 
     <div class="block"> 
      {{ field.label_tag }} 
      {{ field }} 
      {% for err in field.errors %} 
       <span class="error_message">{{ err }}</span> 
      {% endfor %} 
     </div> 
    {% endfor %} 

    <div style="padding-left:11em; padding-bottom:1em;"> 
     <input type="submit" value="{% trans 'Log in' %}" /> 
     <input type="hidden" name="next" value="{{ next }}" /> 
    </div> 
</form> 

我花了一段時間來弄清楚爲什麼嘗試登錄送我到搜索頁面。我意識到在輸入密碼後點擊Enter將激活搜索鍵,而不是用戶名/密碼提交。

我如何配置模板,這樣我可以輸入搜索查詢,並按回車鍵,啓動搜索視圖或進入我的帳戶信息,並按回車鍵,登錄?基本上,我怎麼能指定一個回車鍵按下「屬於」它的必要功能?

回答

0

你不需要這樣的:

<form method="post" action="{% url search %}"> 
    <input name="q" id="id_q" /> 
    <input type="submit" id="id_s" value="Search"> 
</form> 
<script type="text/javascript"> 
$(function($) { 
    $(":submit").click(function() { 
     window.location = "{% url search %}?q=" + $("#id_q").val(); 
    }); 
}); 
</script> 

這是應該做的方式:

<form method="get" action="{% url search %}"> 
    <input name="q" id="id_q" value="{{ request.GET.q }}" /> 
    <input type="submit" id="id_s" value="Search"> 
</form> 

注意,JavaScript是消失了,該窗體現在依賴於使用「獲取「 方法。所以,javascript不會再發生衝突。

另外我添加了一個值到Q輸入,作爲一個自由糖果B)

傑夫Sickel:

刪除代碼調試代碼。

如果你真的想解決的JS,你可以做這樣:

$("form[action={% url search %}]").submit(// ... 

或添加ID來搜索表單:

$("#search_form").submit(// ... 
+0

這是有用的,但仍然」不是個沒有完全滿足我需要的東西。是的,當按下回車鍵時,搜索框會提交,但按登錄表單中填寫信息後回車鍵觸發搜索功能。是否有觸發輸入,同時還允許回車鍵,如果用戶而是使用搜索框的工作密碼後登錄的方法嗎? – 2012-03-28 17:57:45

+0

它有什麼用? – jpic 2012-03-28 20:39:00

+0

也許我誤解了我需要做的。我正在做兩件事。首先,我刪除了JavaScript代碼。其次,我正在使用「get」方法在其周圍添加

來更改搜索框代碼。這複製了上面的代碼。這很有幫助,因爲使用搜索框(上面寫的)會在按下回車鍵時提交。但在按下試圖登錄(使用我在我的問題的最後寫了形式)不提交時回車鍵。我試圖改變這個表單的帖子來獲取,但是它根本無法工作。 – 2012-03-28 23:34:28