0

我有一个表格,可以跟踪校园某些地方允许携带的物品。单选按钮组控制所讨论的区域是物理房间还是更一般的“项目”。任何一个都将其值输入到数据库中的同一字段中。

房间和项目存储在单独的表中。我想在这里利用 jQuery UI 的自动完成功能。到目前为止,无线电组上的更改事件切换了房间和项目的适当文本,并切换了“roomAC”类。'roomAC' 类是自动完成的选择器。

我想当我删除课程时,它不再让自动完成工作,但它确实如此。这是因为事件仍然绑定到 DOM 元素。我想知道是否有办法绑定/取消绑定自动完成事件?还是我被困在我的 if 语句(无线电组之一)中重新创建事件处理程序?

我的

//ROOM FIELD JQUERY-UI AUTO-COMPLETE
$(".roomAC").autocomplete({
    source: "autocomplete.cfm",
    minLength: 4
});

tl;博士

如何绑定和取消绑定 jQuery UI 自动完成事件?

4

1 回答 1

0

关于您关于解除绑定自动完成控件的问题,您可以禁用它或使用.autocomplete( "option" , optionName , [value] )语法更改源。

但是,如果我正确理解您的情况,您实际上希望同时发送搜索词和来源标识符。它可以通过使用回调作为源(在您的自动完成选项中)来实现。文档说:

第三种变体,回调,提供了最大的灵活性,可用于将任何数据源连接到自动完成。回调有两个参数:

一个请求对象,具有一个名为“term”的属性,它指的是文本输入中当前的值。例如,当用户在城市字段中输入“new yo”时,自动完成项将等于“new yo”。

响应回调,它期望单个参数包含要向用户建议的数据。此数据应根据提供的术语进行过滤,并且可以采用上述简单本地数据的任何格式(字符串数组或具有标签/值/两个属性的对象数组)。在请求期间提供自定义源回调以处理错误时,这一点很重要。即使遇到错误,您也必须始终调用响应回调。这确保了小部件始终具有正确的状态。

这是我与 jQuery UI 自动完成一起使用的功能:

function initSuggest(){
    var cache = {},
        lastXhr;
    $( ".Mjesto" ).each( function() {
        $( this ).autocomplete( {
            minLength: 2,
            source: function( request, response ) {
                var sourceId = $("#DrzavaId option:selected").text();
                var term = request.term;
                if ( term in cache ) {
                    response( cache[term] );
                } else {
                    try {
                        lastXhr = $.getJSON( "autocomplete2.cfm", { c: sourceId, t: term }, 
                            function( data, status, xhr ) {
                                cache[term] = data;
                                if ( xhr === lastXhr ) {
                                response( data );
                            }
                        });
                    } catch( ex ) {
                        response( null );
                    }
                }
            },
            autoFocus: true
        } );
    } );
}

此函数还缓存响应。如果您忽略这一点,那么诀窍就在 try/catch 块中。

于 2012-09-18T19:56:21.493 回答