【问题标题】:Using jQuery-ui autocomplete variables in further jQuery-ui autocomplete functions在进一步的 jQuery-ui 自动完成功能中使用 jQuery-ui 自动完成变量
【发布时间】:2010-11-12 23:02:44
【问题描述】:

如何在另一个 jQuery-ui 自动完成功能中使用 jQuery-ui 自动完成中的选定项目?

例如对于这个 HTML:

<div class="ui-widget">
    <label for="project">Project: </label>
    <input id="project" />
    <label for="phase">Phase: </label>
    <input id="phase" />
    <label for="filename">Project: </label>
    <input id="filename" />
</div>

我正在使用以下带有 JSON 端点的自动完成功能来提供数据。

$(function() {
$( "#project" ).autocomplete({
    source: baseUrl+"json/listtitles",
    minLength: 2,
    select: function( event, ui ) {
    }
});
});

然后在第二个自动完成中,我想从第一个自动完成函数中获取选定的值,并使用它来构建 URL 字符串以用于第二个自动完成的源属性(此处显示为 valueFromFirstAutocomplete)。

$(function() {
$( "#phase" ).autocomplete({
    source: baseUrl+"json/listphases/"+valueFromFirstAutocomplete,
    minLength: 2,
    select: function( event, ui ) {
    }
});
});

【问题讨论】:

    标签: javascript jquery jquery-ui autocomplete


    【解决方案1】:

    使用回调自定义源选项,将附加参数添加到 URL:

    $( "#project" ).autocomplete({
        source: baseUrl+"json/listtitles",
        minLength: 2
    });
    $( "#phase" ).autocomplete({
        source: function(request, response) {
            $.get(baseUrl + "/json/listphases/" + $("#project").val(), request, response);
        },
        minLength: 2
    });
    

    【讨论】:

    • 这看起来像我所追求的,但我无法让它发挥作用。似乎没有调用源函数。或者至少没有打印我的调试语句:
    • 忽略该评论。它工作正常。我是个傻瓜。非常感谢乔恩!
    【解决方案2】:

    你可以把一个放在另一个里面......

    这不起作用有什么原因吗?

    $(function() {
    $( "#project" ).autocomplete({
        source: baseUrl+"json/listtitles",
        minLength: 2,
        select: function( event, ui ) {
           $(function() {
           $( "#phase" ).autocomplete({
               source: baseUrl+"json/listphases/"+ui.item.value,
               minLength: 2,
               select: function( event, ui ) {
               }
           });
           });
        }
    });
    });
    

    要独立使用这些,您可以执行以下操作:

    var funclist = {
        populate1 : function() {
          $( "#project" ).autocomplete({
            source: baseUrl+"json/listtitles",
            minLength: 2,
            select: populate2;
          },
    
       populate2 : function(event,ui) {
          $( "#phase" ).autocomplete({
            source: baseUrl+"json/listphases/"+ui.item.value,
            minLength: 2,
            select: populate3;
         }
       populate3 : ; // etc
    }
    
    $(funclist.populate1);
    

    【讨论】:

    • 看起来它可能有效,但我可能想独立使用每个自动完成功能,因此将它们相互包装可能不是最好的方法。这是可变范围的情况吗?我应该在函数之外声明 3 个变量来保存值并从函数内更新它们吗?
    • 也许,看看如何独立使用的变化
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-11
    • 2011-07-23
    • 1970-01-01
    相关资源
    最近更新 更多