我的django模板顶部有一个搜索字段(没有周围的表单标记):
<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 :(得分: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已消失,而且表单现在依赖于使用“get”方法。所以,javascript将不再发生冲突。
我还在q输入中添加了一个值,作为免费礼物B)
Jeff Sickel:
删除的代码是调试代码。
如果你真的想修复js,你可以这样做:
$("form[action={% url search %}]").submit(// ...
或者在搜索表单中添加ID:
$("#search_form").submit(// ...