使用单选按钮切换自动完成源

时间:2012-09-18 19:29:51

标签: java jquery jquery-ui

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

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

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

MY JS

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

TL;博士

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

1 个答案:

答案 0 :(得分:0)

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

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

  

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

     

一个请求对象,其中引用了一个名为“term”的属性   到文本输入中当前的值。例如,当用户   在城市字段中输入“new yo”,自动填充术语将相等   “新哟”。

     

响应回调,它需要一个参数   包含要向用户建议的数据。应过滤此数据   基于所提供的术语,并且可以是所描述的任何格式   上面是简单的本地数据(String-Array或Object-Array with   标签/价值/两个属性)。提供自定义时很重要   源回调以在请求期间处理错误。你必须永远   即使遇到错误也会调用响应回调。这个   确保窗口小部件始终具有正确的状态。

这是我在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块中。