使用Django进行Jquery自动完成

Che*_*uis 5 django jquery jquery-autocomplete

我正试图在django应用程序中使用jquery ui自动填充搜索一些项目.我看过这个问题,我就像自动完成文档一样关注.我对插件或其他东西不感兴趣.我懂了.

在views.py中:

def search_view(request):
    q = request.GET['term']
    ret = []
    listado = Model.objects.filter(descripcion__istartswith=q).order_by("descripcion")
    for l in listado:
        ret.append({'label':l.descripcion, 'value':l.id})
    return HttpResponse(simplejson.dumps(ret), mimetype='application/json')
Run Code Online (Sandbox Code Playgroud)

在我的模板中,我有类似的东西

js:

$("#auto_material").autocomplete({
                source:'{% url search_view %}',
                minLength: 2,
                select: function( event, ui ) {
                    $("#auto_material").val(ui.item.label);
                    $("#id_material").val(ui.item.value);
                }

            });
Run Code Online (Sandbox Code Playgroud)

html:

<input type="text" id="auto_material" name="material" class="campo" style="width:99%;"/>
<input type="hidden" id="id_material" />
Run Code Online (Sandbox Code Playgroud)

搜索项目中的所有内容都可以正常工作,但是当我尝试使用ui.item.label设置文本输入值时,它会继续将ui.item.value放在文本输入上,而不是标签上.

任何的想法?自动完成对象上的"select"事件是否可以覆盖?任何的想法?

提前致谢.

mu *_*ort 3

来自自动完成文档

标签属性显示在建议菜单中。当用户选择一个项目时,该值将被插入到输入元素中。

对于select回调

从菜单中选择某个项目时触发。默认操作是将文本字段的值替换为所选项目的值。

取消[原文如此]此事件会阻止更新值,但不会阻止菜单关闭。

强调我的(他们的拼写错误)。在 jQuery-UI 自动完成源代码中,我们发现:

if ( false !== self._trigger( "select", event, { item: item } ) ) {
    self.element.val( item.value );
}
Run Code Online (Sandbox Code Playgroud)

item.value因此,小部件将在事件处理程序返回后将文本输入的值设置为select。当然,除非(如上面的文档中所述)您的事件处理程序返回false. 尝试将您的select处理程序调整为如下所示:

select: function( event, ui ) {
    $("#auto_material").val(ui.item.label);
    $("#id_material").val(ui.item.value);
    return false;  // <--------------------- Add this
}
Run Code Online (Sandbox Code Playgroud)

这是有记录的行为,因此应该是安全的。